恢复到指定时间点

恢复数据库到指定时间点 /LSN 是从归档恢复的一种方式,也称为不完全恢复。从归档恢复允许恢复到指定的时间点及指定的 LSN 值。若同时指定了时间点和 LSN,则以较早的为结束点。用户可以通过指定一个时间点/LSN,使数据库恢复到这个指定的时间点 /LSN。

例如用户在下午 5 点做了一个误操作,删除了某些重要数据,我们可以指定恢复时间点到下午 4:59 分,恢复被误删除的数据。下面以联机数据库备份为例说明如何恢复数据库到指定的时间点 /LSN。

  1. 准备数据,执行以下命令:
CREATE TABLE TAB_FOR_RECOVER_01(C1 INT);
INSERT INTO TAB_FOR_RECOVER_01 VALUES(1);
COMMIT;
  1. 备份数据库,执行以下命令:
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_full_bak_for_time_lsn';
  1. 正确操作数据库,产生一些归档,执行以下命令:
CREATE TABLE TAB_FOR_RECOVER_02(C1 INT);
INSERT INTO TAB_FOR_RECOVER_02 VALUES(1);
COMMIT;

使用 SELECT SYSDATE 命令查询此时的时间为:2018-11-16 10:56:40.624931。

使用 SELECT FILE_LSN FROM V$RLOG 命令查询此时的 LSN 为:50857。

  1. 误操作数据库。此步骤误删除了表 TAB_FOR_RECOVER_01 中数据。 执行以下命令:
DELETE FROM TAB_FOR_RECOVER_01;
COMMIT;

操作步骤同步骤 3,此时的时间和 LSN 分别为:2018-11-16 10:57:20.977265、50861。

  1. 关闭数据库,打开 RMAN 还原数据库,执行以下语句:(步骤 4 为误操作,因此我们需要将数据库恢复到步骤 3 的状态)
 RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_time_lsn';
  1. 恢复数据库到指定时间点 /LSN。还原后数据库的数据与备份时一致,如果要恢复数据库至步骤 3 的状态可以指定 UNTIL TIMEUNTIL LSN 参数重做部分归档。

使用 RECOVER DATABASE...UNTIL TIME 命令恢复到指定的时间,打开 RMAN,执行以下命令:

RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' WITH
ARCHIVEDIR'/home/dm_arch/arch' UNTIL TIME'2018-11-16 10:56:40.624931';

或者使用 RECOVER DATABASE...UNTIL LSN 命令恢复到指定的时间,执行以下命令:

RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' WITH
ARCHIVEDIR'/home/dm_arch/arch' UNTIL LSN 50857;
  1. 恢复 db_magic,执行以下命令:
RECOVER DATABASE 'D:\dmdbms\data\DAMENG\dm.ini' UPDATE DB_MAGIC;
微信扫码
分享文档
扫一扫
联系客服