本文档记录误删表空间文件、误删REDO日志、误删数据等不同情况下的恢复方法。
当数据文件是在数据库运行时删除的,有恢复时间限制,而且删除后不能重启服务器和数据库服务器,同时系统表空间删除后不能恢复。
新建测试表空间
新建测试表test
通过jmeter测试,当前业务正常
删除测试表空间文件TEST.DBF
删除后业务保持正常
执行SP_FILE_SYS_CHECK();检查数据文件后查询测试表验证
查询test表报错,提示TEST.DBF表空间文件被删除。
Jmeter报错
还原表空间文件前,执行SP_TABLESPACE_PREPARE_RECOVER(‘TEST’);进行恢复准备,否则恢复表空间文件时会失败。
执行SP_TABLESPACE_PREPARE_RECOVER(‘TEST’);
恢复被删文件,只要达梦数据库服务没有被关闭,可以在/proc/fd找到对应的文件副本进行恢复。
通过ps –ef|grep dmserver找到数据库进程的pid号
找到被删除的文件ls –lrt /proc/20431/fd|grep delete(此时文件号为44)
拷贝表空间文件回原路径下
执行SP_TABLESPACE_RECOVER(‘TEST’);
表空间文件在线恢复完成。
还原后业务恢复正常
当误删除表空间文件后,可以通过备份作业生成的数据库物理备份进行本机的表空间还原(需要停数据库服务)。
新建测试表test0313,通过jmeter模拟业务实时插入数据
删除表空间文件TEST.DBF,删除时间点为2023-03-13 22:30:42
删除后业务正常插入数据
停模拟业务后,停数据库服务前查询数据量:
停数据库服务后,使用dmrman工具进行物理还原
通过指定到删除节点前提示执行错误,暂不支持在还原表空间操作时指定还原时间点
根据归档指定还原到最新
查询数据与停库前一致,当数据正常落盘后,通过全备加归档日志能够还原表空间至最新时刻。
**某些特殊情况下,REDO日志文件被删除,此时对于在重做日志中未落盘的数据会存在丢失情况,建议通过备份和归档日志手段进行全库恢复。**本方案仅适用于REDO日志被误删除后需要紧急恢复,并且存在数据库备份和归档日志缺失情况时,恢复数据库数据的应急处理,通过以下方法,处理后需要对当前数据进行导出,新建实例重新导入。
模拟REDO日志被移除。
初始化参数要和原库一致,页大小、大小写敏感、字符集等。可以通过查询初始化文件信息获取,即数据库文件存放路径../dmdata/dmdb2 目录下以 dminit+日期时间.log命名的文件
通过dmmdf查看原库的db_magic值
查询结果db_magic的值为486993666
两个新的REDO日志文件都要修改
输入6设置db_magic值
输入刚刚记录的db_magic值,保存。
PSEG_RECV是数据库系统故障重启时,对活动事务和已提交事务的处理方式。0:跳过回滚活动事务和PURGE已经提交事务的步骤。在回滚表空间出现异常、损坏、系统无法正常启动时,可将PSEG_RECV设置为0,让系统启动,但存在一定风险,未提交事务的修改将无法回滚,破坏事务的原子性;另外,已提交未 PURGE的事务,将导致部分存储空间无法回收;1:回滚活动事务并PURGE已经提交事务;2:延迟PURGE已提交事务,延迟回滚活动事务;3:回滚活动事务,延迟PURGE 已提交事务。
特殊情况下,经过以上步骤处理后的数据库事务原子性已受到影响,因此需要重启数据库服务导出数据,新建实例后重新导入。
编辑原库的dm.ini配置文件,修改PSEG_RECV参数为0
注意:
恢复后第一件事情,需要新建实例,迁移数据到新的实例。之前的实例通过这种方式恢复,数据一致性已经受到影响。
检查导出日志未有报错。
检查导入日志未有报错。
生产环境对数据安全性要求较高,要求数据恢复时间点即RPO为0。本方案通过异步备机,手动apply到误操作删除数据表的时间点,将目标表导出,重新导入至生产环境中,完成后将查询比对还原前后数据、表信息是否一致。
如设置异步备库DW3重演到2023-12-20 20:03:00,则源库不再发送 2023-12-20 20:03:00之后产生的日志,在源库上执行以下系统函数,完成后需要取消指定,见4.1.1.7章节。
在监视器中执行:
主库DW1尝试查询,目标表仍不存在
与删除前一致,恢复完成
与删除前一致,恢复完成
运维人员误删数据库对象,可以通过备份集和归档在其他机器上进行恢复还原,恢复后再将表重新导入原库。本方案需要进行异机还原、目标表导出和导入等步骤,需要消耗一定的恢复操作时间(实际耗时需要结合数据量、磁盘IO、网络速度等综合评估)。
删除时间:2023-02-28 15:27:05
还原到删除时间点之前(2023-02-28 15:27:04为例)
检查日志未有报错
数据无误,恢复完成。
闪回技术主要是通过回滚段存储的 UNDO 记录来完成历史记录的还原。开启闪回功能后, DM 会在内存中记录下每个事务的起始时间和提交时间。通过用户指定的时刻,查询到该时刻的事务号,结合当前记录和回滚段中的 UNDO 记录,就可以还原出特定事务号的记录。即指定时刻的记录状态,从而完成闪回查询。闪回查询功能完全依赖于回滚段管理。
注:对于DROP表的恢复,由于达梦数据库不存在回收站机制,所以对于DROP表操作无法flashback。DMDSC架构对于闪回查询功能不支持。
SP_SET_PARA_VALUE(1,'ENABLE_FLASHBACK',1);
sp_set_para_double_value(1,'UNDO_RETENTION',600);--单位秒
select * from v$dm_ini where para_name in ('ENABLE_FLASHBACK','UNDO_RETENTION');
删除时间2023-02-28 16:57:55
select * from test4 when timestamp '2023-02-28 16:47:50';
通过闪回查询到的结果,创建名为test5的表。
将原表test4备份为test4_bak
查询新还原的test4表数据
还原表数据完毕
可参考4.1误删表对象的恢复方法,将全表导入覆盖,或重新插入相关数据。
文章
阅读量
获赞