注册
误删除数据处理方法
专栏/培训园地/ 文章详情 /

误删除数据处理方法

￿ 2023/12/22 1855 1 0
摘要

误删除数据处理方法

一、简介

本文档记录误删表空间文件、误删REDO日志、误删数据等不同情况下的恢复方法。

二、误删表空间文件

2.1在线恢复

当数据文件是在数据库运行时删除的,有恢复时间限制,而且删除后不能重启服务器和数据库服务器,同时系统表空间删除后不能恢复。

2.1.1创建测试表空间

新建测试表空间
image.png

2.1.2创建测试表

新建测试表test
image.png
通过jmeter测试,当前业务正常
image.png

2.1.3模拟删除表空间文件

删除测试表空间文件TEST.DBF
image.png
image.png
image.png
删除后业务保持正常

2.1.4查询测试表验证

执行SP_FILE_SYS_CHECK();检查数据文件后查询测试表验证
image.png
查询test表报错,提示TEST.DBF表空间文件被删除。
image.png
Jmeter报错

2.1.5在线恢复被删除的表空间文件

还原表空间文件前,执行SP_TABLESPACE_PREPARE_RECOVER(‘TEST’);进行恢复准备,否则恢复表空间文件时会失败。
image.png
执行SP_TABLESPACE_PREPARE_RECOVER(‘TEST’);
image.png
恢复被删文件,只要达梦数据库服务没有被关闭,可以在/proc/fd找到对应的文件副本进行恢复。
通过ps –ef|grep dmserver找到数据库进程的pid号
image.png
找到被删除的文件ls –lrt /proc/20431/fd|grep delete(此时文件号为44)
image.png
拷贝表空间文件回原路径下
image.png

2.1.6数据库中恢复表空间文件

执行SP_TABLESPACE_RECOVER(‘TEST’);
image.png
表空间文件在线恢复完成。
image.png
还原后业务恢复正常

2.2 通过备份恢复

当误删除表空间文件后,可以通过备份作业生成的数据库物理备份进行本机的表空间还原(需要停数据库服务)。

2.2.1新建测试表

新建测试表test0313,通过jmeter模拟业务实时插入数据
image.png

2.2.2删除表空间文件

image.png
删除表空间文件TEST.DBF,删除时间点为2023-03-13 22:30:42
image.png
删除后业务正常插入数据

2.2.3停库还原

停模拟业务后,停数据库服务前查询数据量:
image.png
停数据库服务后,使用dmrman工具进行物理还原
image.png
通过指定到删除节点前提示执行错误,暂不支持在还原表空间操作时指定还原时间点
image.png
根据归档指定还原到最新
image.png

2.2.4启动数据库服务

image.png

2.2.5查询测试表验证

image.png
查询数据与停库前一致,当数据正常落盘后,通过全备加归档日志能够还原表空间至最新时刻。

三、误删REDO日志

**某些特殊情况下,REDO日志文件被删除,此时对于在重做日志中未落盘的数据会存在丢失情况,建议通过备份和归档日志手段进行全库恢复。**本方案仅适用于REDO日志被误删除后需要紧急恢复,并且存在数据库备份和归档日志缺失情况时,恢复数据库数据的应急处理,通过以下方法,处理后需要对当前数据进行导出,新建实例重新导入。

3.1 删除原实例REDO日志

模拟REDO日志被移除。
image.png
image.png

3.2 异机初始化实例

初始化参数要和原库一致,页大小、大小写敏感、字符集等。可以通过查询初始化文件信息获取,即数据库文件存放路径../dmdata/dmdb2 目录下以 dminit+日期时间.log命名的文件
image.png
image.png

3.3启动新初始化的实例,然后正常关闭

image.png
image.png

3.4 将两个REDO文件拷贝到故障实例下

image.png

3.5 修改新REDO日志的db_magic值与原库一致

3.5.1查看源库db_magic

通过dmmdf查看原库的db_magic值
image.png
查询结果db_magic的值为486993666

3.5.2修改新REDO日志

两个新的REDO日志文件都要修改
image.png
输入6设置db_magic值
image.png
输入刚刚记录的db_magic值,保存。

3.6 编辑原库dm.ini配置文件

PSEG_RECV是数据库系统故障重启时,对活动事务和已提交事务的处理方式。0:跳过回滚活动事务和PURGE已经提交事务的步骤。在回滚表空间出现异常、损坏、系统无法正常启动时,可将PSEG_RECV设置为0,让系统启动,但存在一定风险,未提交事务的修改将无法回滚,破坏事务的原子性;另外,已提交未 PURGE的事务,将导致部分存储空间无法回收;1:回滚活动事务并PURGE已经提交事务;2:延迟PURGE已提交事务,延迟回滚活动事务;3:回滚活动事务,延迟PURGE 已提交事务。
特殊情况下,经过以上步骤处理后的数据库事务原子性已受到影响,因此需要重启数据库服务导出数据,新建实例后重新导入。
编辑原库的dm.ini配置文件,修改PSEG_RECV参数为0
image.png

3.7 启动数据库服务

image.png
注意:
恢复后第一件事情,需要新建实例,迁移数据到新的实例。之前的实例通过这种方式恢复,数据一致性已经受到影响。

3.8 导出数据

image.png
检查导出日志未有报错。

3.9 新建实例,导入数据

image.png
image.png
image.png
检查导入日志未有报错。

3.10启动数据库服务

image.png

3.11检查数据

image.png

四、误删数据

4.1 误删表对象

4.1.1 生产环境恢复方法

生产环境对数据安全性要求较高,要求数据恢复时间点即RPO为0。本方案通过异步备机,手动apply到误操作删除数据表的时间点,将目标表导出,重新导入至生产环境中,完成后将查询比对还原前后数据、表信息是否一致。

4.1.1.1 创建测试表及数据

image.png
image.png

4.1.1.2 新增测试数据

image.png
image.png

4.1.1.3 模拟误删表操作

image.png
image.png

4.1.1.4 异步备库重演到指定时间点

如设置异步备库DW3重演到2023-12-20 20:03:00,则源库不再发送 2023-12-20 20:03:00之后产生的日志,在源库上执行以下系统函数,完成后需要取消指定,见4.1.1.7章节。
在监视器中执行:
image.png
image.png

4.1.1.5 异步备库中查询目标表

image.png
主库DW1尝试查询,目标表仍不存在
image.png

4.1.1.6 还原目标表数据至主库
4.1.1.6.1 通过迁移方式

image.png

4.1.1.6.1.1 检查表结构

image.png

4.1.1.6.1.2 检查表数据

image.png
与删除前一致,恢复完成

4.1.1.6.2 通过导出sql文件方式

image.png

4.1.1.6.2.1 检查表结构

image.png

4.1.1.6.2.2 检查表数据

image.png
与删除前一致,恢复完成

4.1.1.7 取消指定重演时间点设置

image.png

4.1.2 异机还原恢复方法

运维人员误删数据库对象,可以通过备份集和归档在其他机器上进行恢复还原,恢复后再将表重新导入原库。本方案需要进行异机还原、目标表导出和导入等步骤,需要消耗一定的恢复操作时间(实际耗时需要结合数据量、磁盘IO、网络速度等综合评估)。

4.1.2.1 创建测试表

image.png

4.1.2.2 删除测试表

image.png
删除时间:2023-02-28 15:27:05

4.1.2.3 异机通过备份恢复
4.1.2.3.1 拷贝备份及归档日志

image.png
image.png

4.1.2.3.2 异库还原数据

还原到删除时间点之前(2023-02-28 15:27:04为例)
image.png
image.png
image.png

4.1.2.4 启动服务查询验证测试表

image.png

4.1.2.5 导出导入测试表

image.png
检查日志未有报错

4.1.2.6 拷贝导出文件至原库,导入表对象

image.png
image.png

4.1.2.7 原库查询测试表

image.png
数据无误,恢复完成。

4.2 误删表数据

4.2.1 数据闪回

闪回技术主要是通过回滚段存储的 UNDO 记录来完成历史记录的还原。开启闪回功能后, DM 会在内存中记录下每个事务的起始时间和提交时间。通过用户指定的时刻,查询到该时刻的事务号,结合当前记录和回滚段中的 UNDO 记录,就可以还原出特定事务号的记录。即指定时刻的记录状态,从而完成闪回查询。闪回查询功能完全依赖于回滚段管理。
注:对于DROP表的恢复,由于达梦数据库不存在回收站机制,所以对于DROP表操作无法flashback。DMDSC架构对于闪回查询功能不支持。

4.2.1.1 闪回设置

SP_SET_PARA_VALUE(1,'ENABLE_FLASHBACK',1);
sp_set_para_double_value(1,'UNDO_RETENTION',600);--单位秒
image.png
select * from v$dm_ini where para_name in ('ENABLE_FLASHBACK','UNDO_RETENTION');
image.png

4.2.1.2 创建测试表,插入数据

image.png
image.png

4.2.1.3 删除数据

删除时间2023-02-28 16:57:55
image.png
image.png

4.2.1.4 闪回查询

select * from test4 when timestamp '2023-02-28 16:47:50';
image.png

4.2.1.5 创建还原表

通过闪回查询到的结果,创建名为test5的表。
image.png

4.2.1.6 备份原表使用还原表

将原表test4备份为test4_bak
image.png

4.2.1.7 查询还原表

查询新还原的test4表数据
image.png
还原表数据完毕

四4.2.2 备份恢复

可参考4.1误删表对象的恢复方法,将全表导入覆盖,或重新插入相关数据。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服