在达梦数据库中模拟多次数据库故障再进行数据还原、恢复

在达梦数据库中模拟多次故障恢复后使用不同数据库归档来恢复
案例1:在实际应用中
1)创建一个数据库D1。
2)操作数据库并执行数据库备份B1。
3)继续操作数据库的过程中数据库故障,此时生成归档为A1。
4)利用备份B1和归档A1将数据库回复你到目标库D2,此时数据库D2为D1故障前的状态
5)启动数据库D2,操作数据库过程中数据库第二次故障,此时生成的归档为A2。
可以得到归档A1、A2属于不同的数据库,使用备份B1和归档A1、A2是否可以恢复数据库到第二次故障发生前的状态吗?如何使用不同数据库的归档恢复数据库到最新状态。
首先初始化一个数据库实例
[dmdba@localhost bin]$ ./dminit path=/opt/dmdbms/data page_size=16 instance_name=D1 DB_NAME=D1 port_num=5241
再注册数据库实例服务
[root@localhost root]# ./dm_service_installer.sh -t dmserver -p D1 -dm_ini /opt/dmdbms/data/D1/dm.ini
开启数据库实例服务
[dmdba@localhost bin]$ ./DmServiceD1 start
Starting DmServiceD1: [ OK ]
连接数据库配置归档
SQL> ALTER DATABASE MOUNT;
SQL> alter database add archivelog ‘dest=/opt/arch,type=local,file_size=1024,space_limit=2048’;
SQL> alter database archivelog;
SQL> alter database open;
2)操作数据库的同时备份数据库,备份集为B1。
SQL> drop table tab_for_recover;
操作已执行
已用时间: 129.239(毫秒). 执行号:513.
SQL> create table tab_for_recover(c1 int);
操作已执行
已用时间: 31.185(毫秒). 执行号:514.
SQL> begin
2 for i in 1…10000000 loop
3 insert into tab_for_recover values(i);
4 commit;
5 end loop;
6 end;
7 /
SQL> backup database full to B1 backupset ‘/opt/dm_bak/B1’ device type disk backupinfo ‘DAMNEG FULL BACKUP ONLINE’ MAXPIECESIZE 2048;
终止向表中插入数据,查看表中的数据
SQL> select * from tab_for_recover;
在这里插入图片描述

3)向数据库插入数据一段时间后关掉数据库实例,模拟数据库故障,从备份后到数据库故障这段时间的生成的归档称为A1。
4)创建目标库D2,作为待还原的库,并配置归档,归档目录和数据库D1相同。
首先初始化一个数据库实例
[dmdba@localhost bin]$ ./dminit path=/opt/dmdbms/data page_size=16 instance_name=D2 DB_NAME=D2 port_num=5242
再注册数据库实例服务
[root@localhost root]# ./dm_service_installer.sh -t dmserver -p D2 -dm_ini /opt/dmdbms/data/D2/dm.ini
开启数据库实例服务
[dmdba@localhost bin]$ ./DmServiceD2 start
Starting DmServiceD2: [ OK ]
连接数据库配置归档
SQL> ALTER DATABASE MOUNT;
SQL> alter database add archivelog ‘dest=/opt/arch,type=local,file_size=1024,space_limit=2048’;
SQL> alter database archivelog;
SQL> alter database open;
5)启动DMRMAN工具,利用备份集B1和归档A1恢复数据库D2到D1故障前的状态。
RMAN> restore database ‘/opt/dmdbms/data/D2/dm.ini’ from backupset ‘/opt/dm_bak/B1’;
RMAN> recover database ‘/opt/dmdbms/data/D2/dm.ini’ with archivedir ‘/opt/arch’;
RMAN> recover database ‘/opt/dmdbms/data/D2/dm.ini’ update db_magic;
6)进入D2数据库中查看在D1数据库中插入的表的数据
在这里插入图片描述

SQL> select * from tab_for_recover;
在这里插入图片描述

7)可以得到数据库D2中已经存在表tab_for_recover,而且表中的数据和数据库D1中的表相同。可知数据库D2是将数据恢复至数据库D1发生故障时的状态。
向数据库D2中重新插入数据
SQL> begin
2 for i in 1…1000000 loop
3 insert into tab_for_recover values(i);
4 commit;
5 end loop;
6 end;
7 /
8)再终止数据库,模拟第二次数据库故障,可以删除数据库D2中部分的数据文件,数据库D2启动到出现故障产生的归档为A2。
9)查看此时数据库D2中表TAB_FOR_RECOVER的数据
[dmdba@localhost bin]$ ./disql SYSDBA/SYSDBA@LOCALHOST:5242
SQL> SELECT * FROM TAB_FOR_RECOVER;
在这里插入图片描述

10)恢复数据库D2到第一次故障前的状态。恢复一次,数据库D2的DB_MAGIC都会改变,因此归档A1、A2的DB_MAGIC不同,属于不同的数据库。第一次恢复只能先重做归档A1,即恢复到第一次故障前的状态。
RMAN> restore database ‘/opt/dmdbms/data/D2/dm.ini’ from backupset ‘/opt/dm_bak/B1’;
RMAN> recover database ‘/opt/dmdbms/data/D2/dm.ini’ with archivedir ‘/opt/arch’;
11)查看归档A2的DB_MAGIC;
[dmdba@localhost bin]$ ./dmrachk arch_fil=/opt/arch/ARCHIVE_LOCAL1_0x61D54110[0]_2020-09-26_10-27-05.log
在这里插入图片描述

12)利用归档A2恢复数据库至第二次故障前的状态,从归档恢复时,默认使用目标库的DB_MAGIC,此时目标库DB_MAGIC的值被替换成B1备份集源库DB_MAGIC,与归档A2的DB_MAGIC值不一致,无法利用该部分归档恢复到最新状态。可使用USE_DB_MAGIC语法,指定DB_MAGIC值为待恢复归档的DB_MAGIC值即可。
RMAN> recover database ‘/opt/dmdbms/data/D2/dm.ini’ with archivedir ‘/opt/arch’ use db_magic 966014498;
13)更新DB_MAGIC
RMAN> recover database ‘/opt/dmdbms/data/D2/dm.ini’ update db_magic;
14)重启数据库实例服务
[dmdba@localhost bin]$ ./DmServiceD2 start
Starting DmServiceD2: [ OK ]
[dmdba@localhost bin]$ ./disql SYSDBA/SYSDBA@LOCALHOST:5242
SQL> SELECT * FROM TAB_FOR_RECOVER;
在这里插入图片描述
在这里插入图片描述

[dmdba@localhost bin]$ ./dmrachk arch_fil=/opt/arch/ARCHIVE_LOCAL1_0xD68D3C2[0]_2020-09-26_14-10-22.log
db_magic : 224973762
[dmdba@localhost bin]$ ./dmrachk arch_fil=/opt/arch/ARCHIVE_LOCAL1_0x6CB93E28[0]_2020-09-26_14-18-00.log
db_magic : 1824079400
[dmdba@localhost bin]$ ./dmrachk arch_fil=/opt/arch/ARCHIVE_LOCAL1_0x39943622[0]_2020-09-26_14-21-55.log
db_magic : 966014498只有这个数可以恢复,最后一次归档的DB_MAGIC。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值