注册
使用不同DB_MAGIC归档启动同一个数据库
技术分享/ 文章详情 /

使用不同DB_MAGIC归档启动同一个数据库

火禾 2023/05/29 1091 0 0

事件流程如下:
创建一个数据库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;
image.png
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;
/
image.png
在插入数据的同时,另一个会话备份数据库
BACKUP DATABASE FULL TO B1 BACKUPSET '/u01/dmdbms/data/DAMENG/bak/DB_FULL_BAK_FOR_RECOVER' DEVICE TYPE DISK;
image.png
3、继续插入一段时间数据后关闭数据库实例,备份完成后到关闭数据库期间产生的归档为A1

image.png
image.png
image.png
4、初始化库D2,即待还原的库
dminit path=/u01/dmdbmsbak/data db_name=DAMENG_FOR_RES
image.png
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;
image.png
6、启动D2,开启归档并配置相同归档路径,继续插入数据
dmserver /u01/dmdbmsbak/data/DAMENG_FOR_RES/dm.ini
image.png
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;
image.png
BEGIN
FOR I IN 1..100000 LOOP
INSERT INTO TAB_FOR_RECOVER VALUES(I);
COMMIT;
END LOOP;
END;
/
image.png
image.png
7、插入一段时间后,关闭数据库,模拟第二次故障,从启动到关闭期间产生的归档为A2
image.png
image.png
image.png
8、将D2恢复至第一次故障前状态,然后利用A1,A2将库启动
首先查看当前数据库的DB_MAGIC
image.png
然后将数据库恢复
image.png
恢复后的DB_MAGIC为
image.png
然后恢复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;

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服