由于没有生产环境,所有这边就只虚拟机模拟一下。此处要注意的是生产环境是不能随便还原的。需要跟客户和上级沟通。我们可以拷贝备份及归档到测试环境进行还原,查找到误操作后再恢复到生产库中。误操作有很多,如误删表,修改了重要数据等等。这里用删除表数据来模拟。其实大致思路差不多
恢复的基本流程如下:
1.现有表a,客户于10点左右将表a中某条数据误删除。
2.停库处理,更换端口。防止继续对该表进行操作,产生各种连带错误。
3.询问操作人员大概是什么时候对表中数据进行误删除。
4.将生产库中的备份,以及归档文件拷贝到一个新库,新库的环境应该与源库保持一致。
5.进入sql日志查询时间(时间,a表数据),在新库还原恢复更新到这个时间节点的前一刻。
6.可以使用 DBMS_LOGMNR 包对归档日志进行挖掘,重构出 DDL 和 DML 等操作,
目前 DBMS_LOGMNR 只支持对归档日志进行分析,配置归档后,还需要将 dm.ini 中的
RLOG_APPEND_LOGIC 选项置为 1 或 2。
(56效果差不多,此处要注意的是重点不是sql,应该是执行的时间,之后恢复到时间节点之前就可以了)
11.找到那条原始数据,还原到生产库即可。
12.修改端口,启动数据库,恢复数据。补个备份。
实操模拟如下:
初始化实例:
./dminit path=/home/dmdba/dmdata page_size=16
image.png
注册服务:
image.png
修改dm.ini文件SVR_LOG参数(开启log日志)
编辑sqllog.ini可以配置文件的路径。
启动数据库:
image.png
使用管理工具连接数据库,并开启归档。(状态转换为配置,配置归档文件,状态切换为打开)
现在先新建一个表,用于后续测试。
image.png
然后我们在此做一个备份。(生产环境上肯定不会预测到出问题之前备份,此处模拟的是安装时定时备份作业在凌晨做的备份)
image.png
之后我们再插入一条数据。(此次模拟的是生产环境凌晨的备份时间节点之后到误删时间节点之前的一系列操作)
image.png
然后此时就是模拟现场误删某一个数据。
当前时间在11点25删除某条数据。
image.png
我们可以查询一下:确实是删除了。
image.png
现在需要恢复到原始的情况。
立即停库处理,以免出现连带错误。(若项目可以停就如此处理。但是实际生产情况是不能停的,就需要准备测试环境完成恢复。后依据测试环境恢复的数据,再去生产环境做错误数据变更修改)
image.png
之后查看sql日志。在11点25分这个大概时间定位到这条sql语句。(生产环境可以询问大概误删的时间范围,在这个时间范围通过sql日志锁定sql执行具体时间)
image.png
如果是单个数据的修改我们直接恢复即可,但是这一行数据都没了,显然仅知道这一条sql无法还原原始数据。但是我们还有备份,也就是说11点25分20秒删除了该数据。我们还原到这个时间节点的前一刻。(此处还原到11点23分)
还原:
RESTORE DATABASE ‘/home/dmdba/dmdata/DAMENG/dm.ini’ FROM BACKUPSET ‘/home/dmdba/dmbak/full_20210926’;
image.png
RECOVER DATABASE ‘/home/dmdba/dmdata/DAMENG/dm.ini’ WITH ARCHIVEDIR ‘/home/dmdba/dmarch’ UNTIL TIME’ 2021-09-26 11:23:00’;
image.png
RECOVER DATABASE ‘/home/dmdba/dmdata/DAMENG/dm.ini’ UPDATE DB_MAGIC;
image.png
启动服务:
此时查询该表格;数据就找回了。
image.png
以上便是误操作的恢复过程。由此可以看出备份的重要性,做好备份往往是数据库中最关键的点。
文章
阅读量
获赞