考虑如下场景:
1) 创建数据库 D1;
2) 操作数据库并执行备份,产生备份集 B1;
3) 继续操作数据库,操作过程中数据库故障,产生归档 A1。
如果故障发生在 REDO 日志已写入联机日志,但未写入归档文件时,由于归档文件缺少
部分 REDO 日志,此时使用备份集 B1 及归档 A1 无法将目标数据库恢复到最新状态。
对于这样的情况,需要使用联机日志修复归档后(详见 3.3.8 归档修复),才可使用归
档文件将目标数据库恢复到最新状态。完全恢复(在规档应用完后,再应用在线的redolog)!
1)、连接数据库执行备份,产生一致性备份集 B1;
SQL> BACKUP DATABASE FULL TO B1 BACKUPSET '/dm/backuppath/B1' DEVICE TYPE DISK BACKUPINFO 'DAMENG FULL BACKUP ONLINE';
2)、做事务
初始表:select count(*) from t;-- 69005351条
做事务:SQL> tr_i(1000000000);
核对表:select count(*) from t;--大约69054345
然后kill -9 掉DB进程。
3)创建待还原的库。
dminit path=/dm/data44/repdb db_name=DAMENG_FOR_RES
4)、为了让后边的recover应用到异常关库时的在线redolog,用REPAIR通过物理层的考页方式将在线的redolog考到规档中去。
RMAN> REPAIR ARCHIVELOG DATABASE '/dm/data/db1/dm.ini'
5)、使用备份集 B1 及归档 A1 将目标库 D2 恢复到最新状态。
RMAN> RESTORE DATABASE '/dm/data44/repdb/DAMENG_FOR_RES/dm.ini' FROM BACKUPSET '/dm/backuppath/B1';
--使用源库的/dm/arch/规档目录来恢复上档库DAMENG_FOR_RES
RMAN> RECOVER DATABASE '/dm/data44/repdb/DAMENG_FOR_RES/dm.ini' WITH ARCHIVEDIR '/dm/arch/';
6)、更新库:
RMAN> RECOVER DATABASE '/dm/data44/repdb/DAMENG_FOR_RES/dm.ini' UPDATE DB_MAGIC;
7)、核对:
改一下:/dm/data44/repdb/DAMENG_FOR_RES/dm.ini 中的PORT_NUM = 5237,启动库:
[dmdba@dm11 ~]$ dmserver /dm/data44/repdb/DAMENG_FOR_RES/dm.ini
启动源库:
[dmdba@dm11 ~]$ dmserver /dm/data/db1/dm.ini
8)、经实验:如果不REPAIR ARCHIVELOG DATABASE '/dm/data/db1/dm.ini',则恢复出来的数据要少一些(不能应用到联机redo),不完全恢复!
更多学习内容参考:达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心