达梦数据库表恢复方法总结
一、问题:
研发在做达梦数据变更时,因误操作等原因引起数据异常,导致业务受到影响,研发希望在不影响现有业务的条件下可以快速恢复到变更前的状态。
二、解决方案
恢复方案 | 方案简介 | 恢复成本 |
实例备份集恢复 |
优点: 可恢复到备份的任意时间点 缺点: 需要单独申请硬件资源,恢复难度大,成本高、时间长。 | 高 |
表级备份恢复-CATS |
1)表数据变更前,研发同学通过create table tabname_bak202508170812 as tabname; 2)按业务需求恢复指定数据或替换源表 优点: 研发同学自控,无需额外准备 缺点: 不适用大数据量表 | 中 |
表级备份恢复-dexp/dimp |
1)表数据变更前,将待变更的表通过dexp导出备份 2)如果需要恢复表数据,把表数据通过dimp导入到临时库(临时schema) 3)按业务需求恢复指定数据或替换源表 优点: 适用较大数据量表 缺点: 需要使用dexp/dimp命令,需要运维参与或工具化 | 低 |
数据闪回 |
(达梦数据闪回查询-快速恢复表) 优点: 恢复快捷方便,是达梦数据特性 缺点: 会影响数据库性能,繁忙生产环境不建议开启,有效恢复时间较短(默认15分钟) | 微 |
三、方案:表级备份恢复-CATS
--备份表数据(tab_bak2)
create table test_dba.tab_bak2 as select * from test_dba.tab1
--恢复表数据
#定义当前schema
set schema test_dba;
#用备份表替代原表
alter table tab_bak1 rename to tab_bak_tmp;
alter table tab_bak2 rename to tab_bak1;
四、方案:表级备份恢复-dexp/dimp
# su - dmdba
$ cd /data/dmdata/dmdbms/bin/
--备份表数据
$ ./dexp USERID=SYSDBA/password FILE=tabexp.dmp LOG=tabexp.log TABLES=test_dba.tab1,test_dba.test5 DIRECTORY=/tmp/exp

--表数据导入到备库(约定schema:databak_zxg)
./dimp USERID=APPUSER/passwd FILE=/tmp/exp/tabexp.dmp LOG=tabimp.log remap_SCHEMA=test_dba:databak_zxg TABLES=test_dba.tab1 DIRECTORY=/tmp/exp REMAP_TABLE=tab1:tab1_11

说明:如果想导入到多个表时,会报创建索引失败
如果只是备份表数据的话,可以不创建索引(把索引命令存储在某个文件里),用如下命令导入
$ ./dimp USERID=APPUSER/CM2ZpDOVOhmoj6TS FILE=/tmp/exp/tabexp.dmp LOG=tabimp.log remap_SCHEMA=test_dba:databak_zxg TABLES=test_dba.tab1 DIRECTORY=/tmp/imp REMAP_TABLE=tab1:tab1_14 INDEXFILE=/tmp/imp/tabimp_idx.log

--恢复表数据
#定义当前schema
set schema test_dba;
#用备份表替代原表
alter table tab_bak1 rename to tab_bak_tmp;
alter table tab_bak2 rename to tab_bak1;
如果想把导入表直接替换为源表,需要为表创建索引,索引位置

dimp/dexp参数参考:dimp 逻辑导入 | 达梦技术文档
五、方案:数据闪回
参考:(达梦数据闪回查询-快速恢复表)
---end----