本章介绍DM8数据库在多次故障恢复后,最新的数据库没有备份,如何使用以前的备份文件恢复到数据库的最新状态。
多次故障恢复后使用不同归档恢复
01
备份数据库
想要数据库故障时能还原恢复,必须要有备份文件,这里制造一个最原始的数据库备份文件,可以使用DMRMAN备份,也可以是联机的备份文件。这里以联机备份为例。
查询数据库魔数:
SQL> select db_magic;
行号 DB_MAGIC
---------- --------------------
1 2098604336
备份数据库:
SQL> backup database full backupset 'DMAMENGFULL_DMRMAN0716';
02
制造数据,生成归档日志1
使用DMHR连接登录数据库,使用如下命令创建表t_table1,此过程生成归档日志1。
SQL> create table dmhr.t_table1 as select * from dmhr.employee;
03
模拟故障,删除数据文件
模拟故障,执行rm DMHR.DBF删除数据文件
04
使用备份文件和归档日志恢复数据库
到最新状态(故障前的状态)
停止数据库,使用DMRMAN还原、恢复数据库和更新数据库魔数。如下三步是数据库单故障使用归档文件还原和恢复的典型方式。
RMAN> restore database '/dm8/data/DAMENG/dm.ini' from backupset 'DMAMENGFULL_DMRMAN0716';
RMAN> recover database '/dm8/data/DAMENG/dm.ini' with archivedir '/dm8/arch';
RMAN> recover database '/dm8/data/DAMENG/dm.ini' update db_magic;
05 打开数据库,制造数据,生成
数据库恢复后的归档日志2
打开数据库,查询数据库中DMHR下t_table1存在,数据正确,说明数据库已经恢复到最新状态。执行如下命令查看DB_MAGIC,可以看到DB_MAGIC已经发生变化。
SQL> select db_magic;
行号 DB_MAGIC
---------- --------------------
1 813815328
使用DMHR连接登录数据库,创建t_table2表,生成数据库恢复后的归档日志2。
SQL> create table dmhr.t_table2 as select * from dmhr.employee;
06
模拟故障,删除数据文件
模拟故障,执行rm DMHR.DBF删除数据文件
07
根据步骤1备份文件和两次的
归档日志还原和恢复数据库
由于第一次还原后我们没有备份,所以只能基于步骤1中产生的备份文件还原,当然如果第一次故障后我们在步骤4恢复后正常做了备份,那此时的恢复也会非常简单,直接使用步骤4单故障恢复方式操作就行。但因为只有步骤1的备份文件,中间经历了两次故障,所以我们就涉及跨库(跨数据库魔数)恢复,恢复步骤如下:
①使用步骤1的备份文件还原
执行如下命令使用步骤1的备份文件还原数据库到备份时状态:
RMAN> restore database '/dm8/data/DAMENG/dm.ini' from backupset 'DMAMENGFULL_DMRMAN0716';
②使用步骤2生成的归档日志1恢复到第一次故障状态
执行如下命令,指定with archivedir参数使用归档恢复,从归档恢复时,默认使用目标库的db_magic,此时目标库db_magic值被替换为步骤1备份集源库db_magic,所以使用的是步骤2产生的归档日志。
RMAN> recover database '/dm8/data/DAMENG/dm.ini' with archivedir '/dm8/arch';
③利用步骤5产生的归档日志2还原到最新状态
执行如下命令,使用use db_magic参数,指定db_magic值为待恢复归档的db_magic值(即使用步骤5的db_magic,使用步骤5生成的归档恢复),使数据还原到步骤6故障前的状态。
RMAN> recover database '/dm8/data/DAMENG/dm.ini' with archivedir '/dm8/arch' use db_magic 813815328;
④更新数据库魔数
执行如下命令更新数据库魔数db_magic信息。
RMAN> recover database '/dm8/data/DAMENG/dm.ini' update db_magic;
此时,数据库恢复完成,打开数据库,可以看到dmhr下t_table2表存在并且数据准确。如果查询数据库魔数,可以看到db_magic已更新。
使用dmrachk工具查看db_magic信息
实际在现网数据库中,多次数据库故障后无法启动,我们可能不知道每次的数据库魔数信息。可以使用dmrachk工具查看每次故障前产生的归档日志文件中的db_magic信息。执行dmrachk help可查看该工具使用方法。
执行如下命令查看归档日志信息,其中红色部分为数据库魔数。
dmrachk arch_fil=ARCHIVE_LOCAL1_0x51FA5B48[0]_2020-07-16_14-49-56.log
查看了归档日志的db_magic信息,再执行第7步的③使用use magic即可指定该数据库魔数的归档日志文件恢复。
好,以上是本次分享内容。
总结:
在多次故障恢复时,可以多次指定use db_magic参数多次恢复数据库,直到恢复到最新状态。
在使用归档恢复时需要注意保证归档日志文件的连续性,如果数据库在中间关闭了归档后又重新开启归档,或者归档日志文件丢失等原因造成了归档日志不连续,将无法恢复数据库到最新状态。