ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

达梦误删除roll数据文件处理

2022-07-14 15:37:37  阅读:215  来源: 互联网

标签:误删除 事务 数据文件 数据库 实例 roll 达梦 进行


roll表空间存储存放事务的undo信息,本文对roll表空间中数据文件的误删除或者数据页损坏进行模拟测试,了解在误删除或者损坏的情况下,如何进行修复,以便于在处理生产问题时,提供充足的操作方法。

首先了解一下此表空间数据文件的作用,我这里总结大概有三种:

1.用来记录事务的回滚信息

如一个执行一个增删改的操作,在redo中记录重做信息之外,同时也会在roll表空间中记录回滚信息,如果此事务提交,则根据表空间大小以及事务的undo时长(参数UNDO_RETENTION)共同决定记录什么时候可以被覆盖,如果事务一直未提交,则一直保留,直到事务提交或回退,在事务一直未提交,且实例故障重启的情况下,因为事务会因实例的终止而回滚,这时也会利用roll里记录的信息,对整个数据库的事务做一致性的前滚操作,以保证事务的一致性。

2.事务的闪回查询

由于误操作带来的事务丢失,可以使用达梦数据库的闪回查询,查询到删除之前的事务信息(结合原表数据+roll里的事务信息,查询到当时整个表的完整记录,当然得同时满足UNDO_RETENTION和roll空间的大小),快速的查询到误操作之前的数据。

roll表空间的误删除分类

目前主流的达梦服务器平台,基本都是linux,所以这里也以linux下的情况做模拟,分为如下三种情况:

1.实例处于正常关闭状态

2.实例处于异常关闭状态

3.实例处于运行状态

接下来就以上三种情况进行分别模拟,出现相应的问题时,查看如何进行恢复

 

实例处于正常关闭状态下的操作

使用备份操作进行恢复属于常规操作,这里不做描述,尝试新建数据库,然后拷贝数据文件的方式进行恢复,先查看一下控制文件中是否记录数据文件的大小,这一步操作也是想解决可能忘记roll数据文件大小的情况下,能否进行恢复:

控制文件中未记录roll数据文件的大小,那记录此文件大小的就是在数据文件本身的头部信息中。

先查看原来数据库的db_magic值是多少,再将新建数据库的值也修改为此值

新建数据库,并且给roll数据文件大小指定一个和原库大小不一致的值,再修改新数据库的db_magic,修改方法即为dmmdf命令(这里不描述,直接dmmdf help即可查看帮助手册)

同时利用dmmdf修改两个重做日志的db_magic,这里不做描述。

修改后,拷贝新库的文件到数据文件目录,启动数据库,还是不能启动,查看错误信息:

后经过多次尝试,依然不能启动数据库,那这样就只能是使用备份进行恢复才能解决此问题了。从备份中进行还原后续会以专题形式进行展示,这里不进行模拟测试。

从以上的操作过程可以得出:数据库备份是异常情况下,数据找回以及状态恢复的重要手段,也是DBA最重要的职责,任何时候,都需要针对系统做完善的备份机制,确保在出现任意文件损坏的情况下,都能找回数据。

 

实例处于异常关闭状态

此过程经过验证,和正常关闭一样,这里不进行描述。

 

实例处于运行状态

对于windows平台,如果实例处于运行状态,OS持有文件,此时不能进行数据文件的删除,所以不存在这种情况,linux可以删除,但是可能通过持有的句柄文件找回,这里进行测试。

使用OS命令删除文件,查看dmserver的进程:

ls -l /proc/5605/fd/

查看结果:

此时显示文件已经被删除,假设此时还有一些事务在运行,查看事务的运行状态以及数据库状态:

 

此时可以进行正常的表创建以及事务操作,数据库也没有任何报错信息。

使用缓存文件进行ROLL.DBF的恢复

cp /proc/5605/fd/9 /dbdata/dmdata/mesdb/ROLL.DBF

然后再进行一次事务操作,查看是否需要对拷贝回来的文件进行恢复,执行事务后,重启数据库

经过验证,可以直接启动实例,查看后台日志也无任何事务操作相关描述。

从以上验证过程中,可以得出,对于Linux平台来说,如果要实现对被误删除的文件,直接从缓存中拷贝文件即可进行恢复。

结论:

1.备份重于一切,是数据找回以及保证实例可用的最关键手段,任何时候都有设计合理的备份方案

2.对于实例运行状态中的数据丢失,一定不能进行操作系统和实例的重启,还可以从缓存中找回数据。

标签:误删除,事务,数据文件,数据库,实例,roll,达梦,进行
来源: https://www.cnblogs.com/ly-nye/p/16477848.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有