利用备份加归档将数据库还原到指定节点
数据库至少有一份全库备份,并且拥有连续的归档日志,那么就可以将数据库还原恢复到之前的任意节点。以下是我个人的操作步骤,仅供参考。
环境说明
系统:centos7
数据库版本:DM8
准备要求:数据库安装完成,开启归档。
场景准备
(库:DAMENG)登录disql,执行以下命令。
./disql SYSDBA/SYSDBA
创建一张测试表table01,并插入数据
SQL> create table table01(t1 int,t2 VARCHAR(100));
SQL> insert into table01 values(1,'第一条数据');
SQL> insert into table01 values(2,'第二条数据');
SQL> insert into table01 values(3,'第三条数据');
SQL> commit;
查询表数据
SQL> select * from table01;
行号 T1 T2
---------- ----------- ---------------
1 1 第一条数据
2 2 第二条数据
3 3 第三条数据
已用时间: 75.133(毫秒). 执行号:8.
对数据库进行全库备份
SQL> backup database full to BACKUP_FILE1 backupset '/home/dmdba/dmbak/DAMENG_bak/backupfull_20210817';
操作已执行
已用时间: 00:00:09.566. 执行号:9.
获取当前时间/LSN
执行select sysdate;命令查询时间
SQL> select sysdate;
行号 SYSDATE
---------- ---------------------------
1 2021-08-17 01:22:50
已用时间: 69.413(毫秒). 执行号:10.
执行select file_lsn from v$rlog命令查询LSN
SQL> select file_lsn from v$rlog;
行号 FILE_LSN
---------- --------------------
1 897234
已用时间: 103.186(毫秒). 执行号:11.
模拟误操作删除测试表第三条数据
执行以下命令
SQL> delete from table01 where t1=3;
SQL> commit;
#查询删除后表数据
SQL> select * from table01;
行号 T1 T2
---------- ----------- ---------------
1 1 第一条数据
2 2 第二条数据
已用时间: 0.529(毫秒). 执行号:14.
获取删除后时间/LSN
执行select sysdate;命令查询时间
SQL> select sysdate;
行号 SYSDATE
---------- ---------------------------
1 2021-08-17 01:30:59
已用时间: 1.165(毫秒). 执行号:15.
执行select file_lsn from v$rlog命令查询LSN
SQL> select file_lsn from v$rlog;
行号 FILE_LSN
---------- --------------------
1 897240
已用时间: 1.515(毫秒). 执行号:16.
对数据库进行还原恢复
以下演示在测试库TEST进行还原恢复操作,需要将备份归档文件传输到目标库
执行scp命令将备份和归档文件拷贝到指定路径下,(注意给dmdba权限)
scp -r /home/dmdba/dmbak/DAMENG_bak/backupfull_20210817 192.168.25.139:/home/dmdba/dmbak/DAMENG_bak
scp -r /home/dmdba/dmarch/DAMENG_arch 192.168.25.139:/home/dmdba/dmarch/
先登录TEST
[dmdba@localhost ~]$ cd /home/dmdba/dmdbms/bin
[dmdba@localhost bin]$ ./disql SYSDBA/SYSDBA@192.168.25.139:5239
服务器[192.168.25.139:5239]:处于普通打开状态
登录使用时间: 80.318(毫秒)
disql V7.6.1.74-Build(2020.10.22-128627)ENT
SQL> select * from table01;
select * from table01;
第1 行附近出现错误[-2106]:无效的表或视图名[TABLE01].
已用时间: 10.923(毫秒). 执行号:0.
停止数据库服务,使用dmrman工具进行还原恢复。
还原到删除数据之前的时间节点
[dmdba@localhost bin]$ ./DmServiceTEST stop
Stopping DmServiceTEST: [ OK ]
[dmdba@localhost ~]$ cd /home/dmdba/dmdbms/bin
[dmdba@localhost bin]$ ./dmrman
dmrman V7.6.1.74-Build(2020.10.22-128627)ENT
RMAN>
RMAN> RESTORE DATABASE '/home/dmdba/dmdata/TEST/dm.ini' FROM BACKUPSET '/home/dmdba/dmbak/DAMENG_bak/backupfull_20210817';
RMAN> RECOVER DATABASE '/home/dmdba/dmdata/TEST/dm.ini' WITH ARCHIVEDIR'/home/dmdba/dmarch/DAMENG_arch' UNTIL TIME'2021-08-17 01:22:50.624931';
RMAN> RECOVER DATABASE '/home/dmdba/dmdata/TEST/dm.ini' UPDATE DB_MAGIC;
还原后启动数据库,重新查询table01;
[dmdba@localhost bin]$ ./DmServiceTEST start
Starting DmServiceTEST: [ OK ]
[dmdba@localhost bin]$ ./disql SYSDBA/SYSDBA@192.168.25.139:5239
服务器[192.168.25.139:5239]:处于普通打开状态
登录使用时间: 11.522(毫秒)
disql V7.6.1.74-Build(2020.10.22-128627)ENT
SQL> select * from table01;
行号 T1 T2
---------- ----------- ---------------
1 1 第一条数据
2 2 第二条数据
3 3 第三条数据
已用时间: 69.975(毫秒). 执行号:3.
还原到删除数据之后的LSN
[dmdba@localhost bin]$ ./DmServiceTEST stop
Stopping DmServiceTEST: [ OK ]
[dmdba@localhost bin]$ ./dmrman
dmrman V7.6.1.74-Build(2020.10.22-128627)ENT
RMAN> RESTORE DATABASE '/home/dmdba/dmdata/TEST/dm.ini' FROM BACKUPSET '/home/dmdba/dmbak/DAMENG_bak/backupfull_20210817';
RMAN> RECOVER DATABASE '/home/dmdba/dmdata/TEST/dm.ini' WITH ARCHIVEDIR'/home/dmdba/dmarch/DAMENG_arch' UNTIL LSN 897240;
RMAN> RECOVER DATABASE '/home/dmdba/dmdata/TEST/dm.ini' UPDATE DB_MAGIC;
还原后启动数据库,重新查询table01;
[dmdba@localhost bin]$ ./DmServiceTEST start
Starting DmServiceTEST: [ OK ]
[dmdba@localhost bin]$ ./disql SYSDBA/SYSDBA@192.168.25.139:5239
服务器[192.168.25.139:5239]:处于普通打开状态
登录使用时间: 27.927(毫秒)
disql V7.6.1.74-Build(2020.10.22-128627)ENT
SQL> select * from table01;
行号 T1 T2
---------- ----------- ---------------
1 1 第一条数据
2 2 第二条数据
已用时间: 96.587(毫秒). 执行号:3.
总结
备份集生成的时间到还原的节点间,归档日志需连续。否则恢复时会提示报错归档日志不连续。
达梦技术社区:https://eco.dameng.com