不同DB_MAGIC归档启动同一个数据库
事件流程如下:
- 创建一个数据库D1;
- 操作数据库并执行数据库备份B1;
- 继续操作数据库的过程中数据库故障,此时生成的归档为A1;
- 利用备份B1和归档A1将数据库D1恢复到目标库D2,此时数据库D2为D1故障前的状态;
- 启动数据库D2,操作数据库过程中数据库第二次故障,此时生成的归档为A2。
归档A1、A2属于不同的数据库,使用备份B1和归档A1、A2是否可以恢复数据库到第二次故障发生前的状态呢?
1、查看D1状态
select name,status$,mode$ from v$instance;
select arch_mode from v$database;
select name from v$archived_log;
2、操作数据库的同时备份数据库,备份集为B1。此处以向表中循环插入数据为例来操作数据库
CREATE TABLE TAB_FOR_RECOVER(C1 INT);
BEGIN
FOR I IN 1..100000 LOOP
INSERT INTO TAB_FOR_RECOVER VALUES(I);
COMMIT;
END LOOP;
END;
/
在插入数据的同时,另一个会话备份数据库
BACKUP DATABASE FULL TO B1 BACKUPSET '/u01/dmdbms/data/DAMENG/bak/DB_FULL_BAK_FOR_RECOVER' DEVICE TYPE DISK;
3、继续插入一段时间数据后关闭数据库实例,备份完成后到关闭数据库期间产生的归档为A1
4、初始化库D2,即待还原的库
dminit path=/u01/dmdbmsbak/data db_name=DAMENG_FOR_RES
5、使用DMRMAN利用备份集B1以及归档A1还原至D1故障前状态
RESTORE DATABASE '/u01/dmdbmsbak/data/DAMENG_FOR_RES/dm.ini' FROM
BACKUPSET '/u01/dmdbms/data/DAMENG/bak/DB_FULL_BAK_FOR_RECOVER';
RECOVER DATABASE '/u01/dmdbmsbak/data/DAMENG_FOR_RES/dm.ini' WITH ARCHIVEDIR '/u01/dmdbms/data/DAMENG/arch';
RECOVER DATABASE '/u01/dmdbmsbak/data/DAMENG_FOR_RES/dm.ini' UPDATE DB_MAGIC;
6、启动D2,开启归档并配置相同归档路径,继续插入数据
dmserver /u01/dmdbmsbak/data/DAMENG_FOR_RES/dm.ini
alter database mount;
alter database archivelog;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/u01/dmdbms/data/DAMENG/arch, TYPE = local, FILE_SIZE = 1024, SPACE_LIMIT = 2048';
alter database open;
select name,status$,mode$ from v$instance;
select arch_mode from v$database;
select name from v$archived_log;
BEGIN
FOR I IN 1..100000 LOOP
INSERT INTO TAB_FOR_RECOVER VALUES(I);
COMMIT;
END LOOP;
END;
/
7、插入一段时间后,关闭数据库,模拟第二次故障,从启动到关闭期间产生的归档为A2
8、将D2恢复至第一次故障前状态,然后利用A1,A2将库启动
首先查看当前数据库的DB_MAGIC
然后将数据库恢复
恢复后的DB_MAGIC为
然后恢复A2归档,但是因为DB_MAGIC值不同,所以恢复时需指定DB_MAGIC
RECOVER DATABASE '/u01/dmdbmsbak/data/DAMENG_FOR_RES/dm.ini' WITH ARCHIVEDIR '/u01/dmdbms/data/DAMENG/arch' USE DB_MAGIC 1410316548;
RECOVER DATABASE '/u01/dmdbmsbak/data/DAMENG_FOR_RES/dm.ini' UPDATE DB_MAGIC;
达梦社区地址:https://eco.dameng.com