备份恢复达梦数据库到指定时间点


一、创建表空间test

create tablespace test datafile '/dmdata/CMXT/test01.dbf' size 200;
二、创建用户test
create user test identified by dameng123 default tablespace test;
grant resource to test;
三、构造测试数据
使用dmdba用户执行以下命令:
创建测试表:
disql test/dameng123;
插入测试数据:
INSERT INTO TAB_FOR_RECOVER_01 VALUES(1);
insert into TAB_FOR_RECOVER_01 values(13);
insert into TAB_FOR_RECOVER_01 values(16);
insert into TAB_FOR_RECOVER_01 values(5);
insert into TAB_FOR_RECOVER_01 values(61);
insert into TAB_FOR_RECOVER_01 values(1);
insert into TAB_FOR_RECOVER_01 values(41);
insert into TAB_FOR_RECOVER_01 values(6);
insert into TAB_FOR_RECOVER_01 values(14);
insert into TAB_FOR_RECOVER_01 values(31);
insert into TAB_FOR_RECOVER_01 values(11);
insert into TAB_FOR_RECOVER_01 values(13);
insert into TAB_FOR_RECOVER_01 values(8);
INSERT INTO TAB_FOR_RECOVER_01 VALUES(1);
insert into TAB_FOR_RECOVER_01 values(13);
insert into TAB_FOR_RECOVER_01 values(16);
insert into TAB_FOR_RECOVER_01 values(5);
insert into TAB_FOR_RECOVER_01 values(61);
insert into TAB_FOR_RECOVER_01 values(1);
insert into TAB_FOR_RECOVER_01 values(41);
insert into TAB_FOR_RECOVER_01 values(6);
commit;
查询数据量:
SQL> select count(*) from TAB_FOR_RECOVER_01;

行号 COUNT(*)
---------- --------------------
1 21
已用时间: 11.839(毫秒). 执行号:500.
四、备份数据库
使用dmdba用户执行以下命令:
disql test/dameng123
SQL> backup database full backupset '/dmdata/databak/full02';
五、删除字段C1的值小于14的记录
SQL> delete from TAB_FOR_RECOVER_01 where C1 < 14;
影响行数 8
已用时间: 2.435(毫秒). 执行号:502.
SQL> commit;
操作已执行
已用时间: 2.956(毫秒). 执行号:503.
查看数据量:
SQL> select count(*) from TAB_FOR_RECOVER_01;

行号 COUNT(*)
---------- --------------------
1 13
已用时间: 0.621(毫秒). 执行号:504.
查询数据库当前时间:
SQL> select sysdate from dual;

行号 sysdate
---------- -------------------
1 2021-11-23 18:30:26
已用时间: 1.201(毫秒). 执行号:505.
查询当前LSN号:
SQL> SELECT FILE_LSN FROM V$RLOG;

行号 FILE_LSN
---------- --------------------
1 47568
已用时间: 2.043(毫秒). 执行号:506.
六、插入13条记录
SQL> insert into TAB_FOR_RECOVER_01 select * from TAB_FOR_RECOVER_01;
影响行数 13

已用时间: 3.991(毫秒). 执行号:507.
SQL> commit;
操作已执行
已用时间: 0.988(毫秒). 执行号:508.
查看数据量:
SQL> select count(*) from TAB_FOR_RECOVER_01;

行号 COUNT(*)
---------- --------------------
1 26

已用时间: 0.700(毫秒). 执行号:509.
查询数据库当前时间:
SQL> select sysdate from dual;

行号 sysdate
---------- -------------------
1 2021-11-23 18:33:30

已用时间: 0.597(毫秒). 执行号:510.
查询数据库当前LSN号:
SQL> SELECT FILE_LSN FROM V$RLOG;

行号 FILE_LSN
---------- --------------------
1 47595

已用时间: 0.675(毫秒). 执行号:511.
七、删除5条记录
SQL> delete from TAB_FOR_RECOVER_01 where rownum < 6;
影响行数 5

已用时间: 1.002(毫秒). 执行号:512.
SQL> commit;
操作已执行
已用时间: 1.109(毫秒). 执行号:513.
查看数据量:
SQL> select count(*) from TAB_FOR_RECOVER_01;

行号 COUNT(*)
---------- --------------------
1 21

已用时间: 0.738(毫秒). 执行号:514.
查询数据库当前时间:
SQL> select sysdate from dual;

行号 sysdate
---------- -------------------
1 2021-11-23 18:35:29

已用时间: 0.624(毫秒). 执行号:515.
查询数据库当前LSN号:
SQL> SELECT FILE_LSN FROM V$RLOG;

行号 FILE_LSN
---------- --------------------
1 47603

已用时间: 0.530(毫秒). 执行号:516.
八、手动产生检查点
使用dmdba用户执行以下命令:
disql test/dameng123
SQL> checkpoint(100);
九、还原数据库到删除字段C1的值小于14的记录之后的状态
关闭数据库:
使用root用户执行以下命令:
systemctl stop DmServicedw
使用dmdba用户执行以下命令:
dmrman
在dmrman的命令行交互界面中执行以下命令:
还原数据库:
restore database '/dmdata/CMXT/dm.ini' from backupset '/dmdata/databak/full02';
恢复数据库到指定的时间点2021-11-23 18:30:26:
RECOVER DATABASE '/dmdata/CMXT/dm.ini' WITH ARCHIVEDIR'/dmdata/arch' UNTIL TIME'2021-11-23 18:30:26';
更新数据库魔数值:
RECOVER DATABASE '/dmdata/CMXT/dm.ini' UPDATE DB_MAGIC;
使用root用户执行以下命令:
启动数据库:
systemctl start DmServicedw
验证数据:
使用dmdba用户执行以下命令:
disql test/dameng123;
SQL> select count(*) from TAB_FOR_RECOVER_01;

行号 COUNT(*)
---------- --------------------
1 13

已用时间: 7.159(毫秒). 执行号:500.
TAB_FOR_RECOVER_01的表记录数为13条,证实数据库已还原恢复到删除字段C1的值小于14的记录之后的状态。
十、还原数据库到插入13条记录之后的状态
关闭数据库:
使用root用户执行以下命令:
systemctl stop DmServicedw
使用dmdba用户执行以下命令:
dmrman
在dmrman的命令行交互界面中执行以下命令:
还原数据库:
restore database '/dmdata/CMXT/dm.ini' from backupset '/dmdata/databak/full02';
恢复数据库到指定的LSN号47595:
RECOVER DATABASE '/dmdata/CMXT/dm.ini' WITH ARCHIVEDIR'/dmdata/arch' UNTIL LSN 47595;
更新数据库魔数值:
RECOVER DATABASE '/dmdata/CMXT/dm.ini' UPDATE DB_MAGIC;
使用root用户执行以下命令:
启动数据库:
systemctl start DmServicedw
验证数据:
使用dmdba用户执行以下命令:
disql test/dameng123;
SQL> select count(*) from TAB_FOR_RECOVER_01;

行号 COUNT(*)
---------- --------------------
1 26

已用时间: 7.568(毫秒). 执行号:500.
TAB_FOR_RECOVER_01的表记录数为26条,证实数据库已还原恢复到插入13条记录之后的状态。

 

想要获取达梦数据库更多的学习资料,可登陆达梦数据云适配中心(https://eco.dameng.com/)获取。