为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM Database Server 64 V8--03134284368-20250430-272000-20149 Pack1
【操作系统】:
【CPU】:
【问题描述】*:达梦支持表分区备份吗?为什么没办法恢复,而且备份的是整张表结构
-- 分区备份
dexp userid=sysdba/xxxx:5236 directory=/u01/dmbak/DAMENG/bak/dexp file=CALLINFO_P3_$(date +%F).dmp log=CALLINFO_P3_$(date +%F).log \
tables=PANDA.CALLINFO:P3
上面备份了panda.CALLINFO P3分区,而当我drop或者delete或者truncate P3分区的数据想要恢复的话,正常的话如果有该分区的备份把表分区的结构建出来就可以恢复了,在DM8上测试没有办法恢复,报错如下:
P3分区重建之后或者不drop分区只清除数据恢复时报错: [警告]表已存在,表 PANDA.CALLINFO 导入失败...
P3分区不重建之后报错: [警告]分区P3不是表PANDA.CALLINFO的一部分,或者不能被导入导出
整张表drop恢复之后恢复的是整个表结构和备份分区的数据
drop table panda.CALLINFO;
dimp userid=sysdba/xxxx:5236 directory=/u01/dmbak/DAMENG/bak/dexp file=CALLINFO_P3_$(date +%F).dmp log=imp_CALLINFO_P3_$(date +%F).log \
tables=PANDA.CALLINFO:P3
dmdba@DAMENG:5236 SQL> @tab panda.CALLINFO
OWNER TABLE_NAME TYPE NUM_ROWS BLOCKS EMPTY AVGSPC ROWLEN LAST_ANALYZED DEGREE COMPRESSION
----- ---------- ---- -------- ------ ----- ------ ------ ------------- ------ -----------
PANDA CALLINFO PIOT NULL NULL NULL NULL NULL NULL 1 DISABLED
已用时间: 4.914(毫秒). 执行号:648915.
dmdba@DAMENG:5236 SQL>
-- 只有P3分区的数据,P5分区还有一条数据、
dmdba@DAMENG:5236 SQL> select * from panda.CALLINFO;
CALLER CALLEE TIME DURATION
--------------- --------------- -------------------------- -----------
刘备 关羽 2010-08-15 00:00:00.000000 10
已用时间: 11.885(毫秒). 执行号:648916.
dmdba@DAMENG:5236 SQL>
dmdba@DAMENG:5236 SQL> @tabpart panda.CALLINFO
未知的 COLUMN 选项 head
TABLE_OWNER TABLE_NAME POS COMPOSITE PARTITION_NAME NUM_ROWS SUBPARTITION_COUNT TABPART_HIGH_VALUE HIGH_VALUE_LENGTH COMPRESSION COMPRESS_FOR
----------- ---------- ----------- --------- -------------- -------------------- -------------------- ----------------------------- ----------------- ----------- ------------
PANDA CALLINFO 1 NO P1_2 NULL 0 DATETIME'2010-07-01 00:00:00' 29 NONE NULL
PANDA CALLINFO 2 NO P3 NULL 0 DATETIME'2010-10-01 00:00:00' 29 NONE NULL
PANDA CALLINFO 3 NO P4 NULL 0 DATETIME'2011-01-01 00:00:00' 29 NONE NULL
PANDA CALLINFO 4 NO P5 NULL 0 DATETIME'2011-04-01 00:00:00' 29 NONE NULL
PANDA CALLINFO 5 NO PMAX NULL 0 MAXVALUE 8 NONE NULL
已用时间: 3.742(毫秒). 执行号:648917.
恢复到另一张表上之恢复了结构没有后数据
-- 恢复成另一张表
dimp userid=sysdba/xxxx:5236 directory=/u01/dmbak/DAMENG/bak/dexp file=CALLINFO_P3_$(date +%F).dmp log=imp_CALLINFO_P3_$(date +%F).log \
tables=PANDA.CALLINFO:P3 REMAP_TABLE=PANDA.CALLINFO:T_CALLINFO
dmdba@DAMENG:5236 SQL> select * from panda.t_CALLINFO;
已用时间: 0.460(毫秒). 执行号:648927.
-- 没有数据
dmdba@DAMENG:5236 SQL> @tabpart panda.T_CALLINFO
未知的 COLUMN 选项 head
TABLE_OWNER TABLE_NAME POS COMPOSITE PARTITION_NAME NUM_ROWS SUBPARTITION_COUNT TABPART_HIGH_VALUE HIGH_VALUE_LENGTH COMPRESSION COMPRESS_FOR
----------- ---------- ----------- --------- -------------- -------------------- -------------------- ----------------------------- ----------------- ----------- ------------
PANDA T_CALLINFO 1 NO P1_2 NULL 0 DATETIME'2010-07-01 00:00:00' 29 NONE NULL
PANDA T_CALLINFO 2 NO P3 NULL 0 DATETIME'2010-10-01 00:00:00' 29 NONE NULL
PANDA T_CALLINFO 3 NO P4 NULL 0 DATETIME'2011-01-01 00:00:00' 29 NONE NULL
PANDA T_CALLINFO 4 NO P5 NULL 0 DATETIME'2011-04-01 00:00:00' 29 NONE NULL
PANDA T_CALLINFO 5 NO PMAX NULL 0 MAXVALUE 8 NONE NULL
已用时间: 3.906(毫秒). 执行号:648906.
dmdba@DAMENG:5236 SQL> select * from panda.CALLINFO;
CALLER CALLEE TIME DURATION
--------------- --------------- -------------------------- -----------
刘备 关羽 2010-08-15 00:00:00.000000 10
刘备 关羽 2011-03-15 00:00:00.000000 10
dmdba@DAMENG:5236 SQL> select * from panda.CALLINFO partition(P3);
CALLER CALLEE TIME DURATION
--------------- --------------- -------------------------- -----------
刘备 关羽 2010-08-15 00:00:00.000000 10
已用时间: 10.951(毫秒). 执行号:648912.
dmdba@DAMENG:5236 SQL>
dmdba@DAMENG:5236 SQL> select * from panda.CALLINFO partition(P5);
CALLER CALLEE TIME DURATION
--------------- --------------- -------------------------- -----------
刘备 关羽 2011-03-15 00:00:00.000000 10
已用时间: 11.211(毫秒). 执行号:648913.

目前测试表分区恢复有三种方法:
1、再导入时加上 TABLE_EXISTS_ACTION=REPLACE 参数,直接覆盖可以解决表已存在的报错,不推荐,会覆盖原有表!会覆盖原有表!会覆盖原有表!
2、恢复成另一个用户,这种方式需要每一个dmp文件建一个表,而且要重新insert回原表,插入时需要注意roll空间。
3、导出时只导出 行数据 INCLUDE=ROWS,恢复时把表结构建好。最好把当时的表结构,索引、约束也备份一份,如果字段有修改应该也是失败的。