恢复|DM8数据库基于时间点的恢复


在生产环境中 , 当我们误操作删除了重要数据时 , 可以使用闪回查询来找回原来的数据 , 但当表被删除或者数据库没有开启闪回功能时 , 则无法使用闪回来获取原有的表数据;此时我们可以使用基于归档日志的时间点的恢复(不完全恢复)来达到恢复数据或恢复表的目的 。
本章介绍DM8数据库如何使用归档日志文件将数据库恢复到指定时间点的状态 。
本章内容已在如下环境上测试:
操作系统:中标麒麟7;
数据库版本:达梦8;
相关关键字:DM还原恢复 , WITH ARCHIVEDIR ,UNTIL TIME , 基于时间点的恢复
基于时间点的恢复
01
备份数据库
数据库故障还原的前提是要有备份文件 , 这里创建一个原始的数据库备份文件 , 可以使用DMRMAN脱机备份文件 , 也可以是联机备份文件 。 这里以联机备份为例(在联机备份之前 , 需要保证数据库已开启并配置归档) 。 使用SYSDBA用户登录数据库 , 执行如下语句备份数据库:
SQL&gt backup database full backupset "DMTESTFULL_ONLINE0723"
恢复|DM8数据库基于时间点的恢复
本文插图

02
制造数据 , 生成归档日志
创建test用户 , 并在test用户下创建表t_table并插入数据 , 此过程生成归档日志 。

SQL&gt create user test IDENTIFIED by dameng123 DEFAULT TABLESPACE mainSQL&gt create table test.t_table as select * from SYSOBJECTS
恢复|DM8数据库基于时间点的恢复
本文插图

03
模拟故障 , 删除表
模拟故障 , 删除test用户下表t_table 。 并记录下删除表时的系统时间 。
恢复|DM8数据库基于时间点的恢复
本文插图

04
使用备份和归档日志将
数据库恢复到指定时间点
t_table表被删除 , 要想找回此表的数据 , 只能将数据库恢复到表删除的前一刻 。 恢复步骤参考如下:
使用备份文件还原数据库
执行如下命令停止数据库:
[dmdba@localhost bin]$ DmServiceDMTESTSERVER stop
【恢复|DM8数据库基于时间点的恢复】使用步骤1的备份文件将数据库还原到备份时状态:
RMAN&gt restore database "/dm8/data/DMTEST/dm.ini" from backupset "DMTESTFULL_ONLINE0723"
恢复|DM8数据库基于时间点的恢复
本文插图

使用归档日志将数据库恢复到指定时间点
执行如下命令 , 指定with archivedir参数使用归档恢复 , 并指定until time参数将数据库还原到删除表之前的时间 , 由步骤3得知 , 我们大概在2020-07-23 10:48:53之前的时间删除了表数据 , 这里将数据库恢复到2020-07-23 10:48:40的时间(时间越精确越好 , 无法精确的情况下预估) 。

RMAN&gt recover database "/dm8/data/DMTEST/dm.ini" with archivedir "/dm8/data/DMTEST/arch" until time "2020-07-23 10:48:40"
从下面的截图可以看出 , 归档的恢复并不是100%(因为是不完全恢复 , 并没有完全重做所有归档日志) , 只是恢复到93% 。
恢复|DM8数据库基于时间点的恢复
本文插图

更新数据库魔数
执行如下命令更新数据库魔数db_magic信息 。
RMAN&gt recover database "/dm8/data/DMTEST/dm.ini" update db_magic
此时 , 数据库恢复完成 。
执行DmServiceDMTESTSERVER start启动数据库 , 连接数据库查询test用户下t_table表数据 , 可以看到t_test表已恢复 。


推荐阅读