例如,用户在下午19:14:06点做了一个误操作,删除了某些重要数据;我们可以指定恢复时
间点到下午19:12:06分,恢复被误删除的数据。
下面以联机数据库备份为例说明如何恢复数据库到指定的时间点/LSN。
- 准备数据;
SQL>CREATE TABLE TAB_FOR_RECOVER_01(C1 INT);
SQL>INSERT INTO TAB_FOR_RECOVER_01 VALUES(1);
SQL>COMMIT;
- 备份数据库;
SQL>BACKUP DATABASE BACKUPSET ‘/home/dmdba/dm_bak/db_full_bak_for_time_lsn’;
- 正确操作数据库,产生一些归档;
SQL>CREATE TABLE TAB_FOR_RECOVER_02(C1 INT);
SQL>INSERT INTO TAB_FOR_RECOVER_02 VALUES(1);
SQL>COMMIT;
使用 SELECT SYSDATE 命令查询此时的时间为:2022-04-20 19:12:06。
使用 SELECT FILE_LSN FROM V$RLOG 命令查询此时的 LSN 为:1787861。
- 误操作数据库。此步骤误删除了表 TAB_FOR_RECOVER_01 中数据;
SQL>DELETE FROM TAB_FOR_RECOVER_01;
SQL>COMMIT;
操作步骤同步骤 3),此时的时间和 LSN 分别为:2022-04-20 19:14:06、1787865。
- 还原数据库。步骤 4)为误操作,因此我们需要将数据库恢复到步骤 3)的状态。
首先需要关闭数据库实例,然后利用 DMRMAN 工具还原数据库:
RMAN> RESTORE DATABASE ‘/home/dmdba/dmdbms/data/test/dm.ini’ FROM BACKUPSET ‘/home/dmdba/dm_bak/db_full_bak_for_time_lsn’;
- 恢复数据库到指定时间点/LSN。还原后数据库的数据与备份时一致,如果要恢复
数据库至步骤 3)的状态可以指定 UNTIL TIME 或 UNTIL LSN 参数重做部分归档。
使用 RECOVER DATABASE…UNTIL TIME 命令恢复到指定的时间:
RMAN>RECOVER DATABASE ‘/home/dmdba/dmdbms/data/test/dm.ini’ WITH ARCHIVEDIR ‘/home/dmdba/dmdbms/data/test/bak’ UNTIL TIME ‘2022-04-20 19:12:06’;
或者使用 RECOVER DATABASE…UNTIL TIME 命令恢复到指定的 LSN:
RMAN>RECOVER DATABASE ‘/home/dmdba/dmdbms/data/test/dm.ini’ WITH ARCHIVEDIR ‘/home/dmdba/dmdbms/data/test/bak’ UNTIL LSN 1787861;
7)恢复成功后更新副本DB_MAGIC。
RECOVER DATABASE ‘/home/dmdba/dmdbms/data/test/dm.ini’ UPDATE DB_MAGIC;
8)启动数据库服务
systemctl start DmServiceDMSERVER.service
社区地址:https://eco.dameng.com