在处理问题的过程中,客户反馈在达梦数据库
中导入导出分区表,get 表的DDL,不会出现表的所有分区信息,ORACLE数据库
却会出现所有分区表,事实真的如此吗?复现过程如下:
1、创建基础表数据
--版本
select id_code;
--结果:1-2-70-21.09.24-147898-10028-SEC Pack2
--初始化信息
--dminit path=/dmdata page_size=32 extent_size=32 charset=0 case_sensitive=0 log_size=2048 db_name=DAMENG instance_name=dmdb SYSDBA_PWD="Hn@dameng123" SYSAUDITOR_PWD="Hn@dameng123"
--创建表
CREATE TABLE FUT_BGL_FQB_CJJG_001(SALES_ID NUMBER PRIMARY KEY,
SALEMAN VARCHAR(10),
SALEDATE DATE,
SALECOUNT INT,
CITY VARCHAR(10)) PARTITION BY RANGE(SALEDATE)
INTERVAL(NUMTOYMINTERVAL(1,'YEAR'))
(
PARTITION P1 VALUES LESS THAN (datetime '2019-09-01 00:00:00'),
PARTITION P2 VALUES LESS THAN (datetime '2020-09-01 00:00:00')
);
--查询表的分区情况
SELECT table_name, partition_name, high_value
FROM dba_tab_partitions
WHERE table_name = 'FUT_BGL_FQB_CJJG_001'
ORDER BY partition_position;
--结果:p1和p2两个分区
--插入数据触发自动分区
insert into FUT_BGL_FQB_CJJG_001 (SALES_ID,SALEDATE) values(1,'2020-09-02 00:00:00')
insert into FUT_BGL_FQB_CJJG_001 (SALES_ID,SALEDATE) values(2,'2021-09-02 00:00:00')
insert into FUT_BGL_FQB_CJJG_001 (SALES_ID,SALEDATE) values(3,'2022-09-02 00:00:00')
insert into FUT_BGL_FQB_CJJG_001 (SALES_ID,SALEDATE) values(4,'2023-09-02 00:00:00')
commit;
--查询表中数据
select * from FUT_BGL_FQB_CJJG_001;
--结果:已插入
--1 NULL 2020-09-02 NULL NULL
--查询表的分区情况
SELECT table_name, partition_name, high_value
FROM dba_tab_partitions
WHERE table_name = 'FUT_BGL_FQB_CJJG_001'
ORDER BY partition_position;
--结果:6个分区
--FUT_BGL_FQB_CJJG_001 P1 DATE'2019-09-01'
--FUT_BGL_FQB_CJJG_001 P2 DATE'2020-09-01'
--FUT_BGL_FQB_CJJG_001 SYS_P1051_1054 DATE'2021-09-01'
--FUT_BGL_FQB_CJJG_001 SYS_P1051_1056 DATE'2022-09-01'
--FUT_BGL_FQB_CJJG_001 SYS_P1051_1058 DATE'2023-09-01'
--FUT_BGL_FQB_CJJG_001 SYS_P1051_1060 DATE'2024-09-01'
2、导出导入
2.1、普通导出导入
普通导出导入只能看到创建两个分区的原始ddl,不能看到插入数据触发系统自动分区的内容
--⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐导出⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
--[dmdba@localhost0 dmdata]$ dexp USERID=SYSDBA/'"Hn@dameng123"'@192.168.56.200:5236 directory=/dmdata file=exptest.dmp log=exptest.log full=y tablespace=Y
--dexp V8
----- [2024-08-08 14:22:37]导出表:FUT_BGL_FQB_CJJG_001 -----
--导出模式下的对象权限...
--表FUT_BGL_FQB_CJJG_001导出结束,共导出 4 行数据
--模式[SYSDBA]导出结束.....
--成功导出 第1 个SCHEMA :SYSDBA
--共导出 1 个SCHEMA
--整个导出过程共花费 0.219 s
--成功终止导出, 没有出现警告
--⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐重新初始化库⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
--dminit path=/dmdata page_size=32 extent_size=32 charset=0 case_sensitive=0 log_size=2048 db_name=DAMENG instance_name=dmdb SYSDBA_PWD="Hn@dameng123" SYSAUDITOR_PWD="Hn@dameng123"
--⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐导入⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
--[dmdba@localhost0 dmdata]$ dimp USERID=SYSDBA/'"Hn@dameng123"'@192.168.56.200:5236 file=/dmdata/exptest.dmp full=y
--dimp V8
----- [2024-08-08 14:26:43]导入表:FUT_BGL_FQB_CJJG_001 -----
--创建表 FUT_BGL_FQB_CJJG_001 ...
--导入表 FUT_BGL_FQB_CJJG_001 的数据:4 行被处理
--导入模式中的 GLOBAL 对象……
--模式中的 GLOBAL 对象导入完成……
--模式[SYSDBA]导入完成......
--整个导入过程共花费 4.729 s
--成功终止导入, 没有出现警告
--查询表的分区情况
SELECT table_name, partition_name, high_value
FROM dba_tab_partitions
WHERE table_name = 'FUT_BGL_FQB_CJJG_001'
ORDER BY partition_position;
--结果:6个分区
--FUT_BGL_FQB_CJJG_001 P1 DATE'2019-09-01'
--FUT_BGL_FQB_CJJG_001 P2 DATE'2020-09-01'
--FUT_BGL_FQB_CJJG_001 SYS_P1051_1054 DATE'2021-09-01'
--FUT_BGL_FQB_CJJG_001 SYS_P1051_1056 DATE'2022-09-01'
--FUT_BGL_FQB_CJJG_001 SYS_P1051_1058 DATE'2023-09-01'
--FUT_BGL_FQB_CJJG_001 SYS_P1051_1060 DATE'2024-09-01'
--get表的ddl
select SYS.DBMS_METADATA.GET_DDL('TABLE','FUT_BGL_FQB_CJJG_001')from DUAL;
--结果:创建两个分区的原始ddl
2.2、fast导出导入
fast导出然后导入时会报错:没有找到合适的分区,数据无法导入,因此只能看到创建两个分区的原始ddl
--⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐导出⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
--[dmdba@localhost0 dmdata]$ dexp USERID=SYSDBA/'"Hn@dameng123"'@192.168.56.200:5236 directory=/dmdata file=exptest.dmp log=exptest.log full=y tablespace=Y
--dexp V8
----- [2024-08-09 09:38:48]导出表:FUT_BGL_FQB_CJJG_001 -----
--导出模式下的对象权限...
--表FUT_BGL_FQB_CJJG_001导出结束,共导出 4 行数据
--模式[SYSDBA]导出结束.....
--成功导出 第1 个SCHEMA :SYSDBA
--共导出 1 个SCHEMA
--整个导出过程共花费 0.121 s
--成功终止导出, 没有出现警告
--⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐重新初始化库⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
--dminit path=/dmdata page_size=32 extent_size=32 charset=0 case_sensitive=0 log_size=2048 db_name=DAMENG instance_name=dmdb SYSDBA_PWD="Hn@dameng123" SYSAUDITOR_PWD="Hn@dameng123"
dimp USERID=SYSDBA/'"Hn@dameng123"'@192.168.56.200:5236 FILE=/dmdata/exptest.dmp PARALLEL=8 TABLE_PARALLEL=8 FAST_LOAD=y TASK_THREAD_NUMBER=16 TASK_SEND_NODE_NUMBER=16
--⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐导入⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
--[dmdba@localhost0 dmdata]$ dimp USERID=SYSDBA/'"Hn@dameng123"'@192.168.56.200:5236 FILE=/dmdata/exptest.dmp PARALLEL=8 TABLE_PARALLEL=8 FAST_LOAD=y TASK_THREAD_NUMBER=16 TASK_SEND_NODE_NUMBER=16
--dimp V8
----- [2024-08-09 09:47:14]导入表:FUT_BGL_FQB_CJJG_001 -----
--创建表 FUT_BGL_FQB_CJJG_001 ...
--没有找到合适的分区
--没有找到合适的分区
--没有找到合适的分区
--没有找到合适的分区
--0行记录已提交
--表 FUT_BGL_FQB_CJJG_001 的数据导入完成,共导入数据:0 行
--[警告]文件中的数据没有全部导入到表中……
--导入模式中的 GLOBAL 对象……
--模式中的 GLOBAL 对象导入完成……
--模式[SYSDBA]导入完成......
--整个导入过程共花费 5.091 s
--成功终止导入, 但出现警告
--查询表的分区情况
SELECT table_name, partition_name, high_value
FROM dba_tab_partitions
WHERE table_name = 'FUT_BGL_FQB_CJJG_001'
ORDER BY partition_position;
--结果:2个分区
--FUT_BGL_FQB_CJJG_001 P1 DATE'2019-09-01'
--FUT_BGL_FQB_CJJG_001 P2 DATE'2020-09-01'
3、ORACLE数据库
【ORACLE数据库】-导入导出过程中get DDL复现过程: https://blog.csdn.net/weixin_47686079/article/details/141350869
4、结论
不论是oracle
还是达梦数据库
,导入时都只能看到创建两个分区的原始ddl(达梦数据库fast导入报错请忽略,不要用这种方式)