运维日记|达梦数据库DM7误删数据文件的快速恢复 – 作者:database

01 概念说明

在达梦数据库中,有两个与数据文件恢复相关的重要特性。

1)表空间文件失效检查

在Liunx系统中,由于被进程打开的文件仍可以在OS系统中被删除,因此DM7存在数据文件被误删的风险。

表空间文件失效检查,就是能够以自动或手动的方式检测出被删除的数据文件,并立刻停止相关表空间的使用。

在参数文件dm.ini中指定 FIL_CHECK_INTERVAL 值,可以设置自动检查数据文件是否存在的时间间隔。也可以使用手动方式,通过执行系统过程SP_FILE_SYS_CHECK()去检查数据文件是否存在。

DM7系统一旦检测出某个表空间内的数据文件被删除,则与该表空间所有的操作都将会失败,并报错该表空间内数据文件被删除。

2)表空间失效文件恢复。

linux系统中被删除的文件,只要其句柄没有被关闭,那可以在/proc/<pid>/fd中找到其对应的文件副本。利用此办法,结合DM7系统过程,就可以做到快速恢复被误删除的数据文件,步骤如下:

1、首先我们先调用达梦数据库自带的系统过程 SP_TABLESPACE_PREPARE_RECOVER (tablespace_name),准备恢复。

2、通过操作系统ps命令找到当前dmserver的PID:ps –ef|grep dmserver

3、使用操作系统ls命令查看被删除文件对应的副本:ls /proc/<PID>/ fd –l

4、使用操作系统cp命令将文件复制到原位置。

5、最后一步,复制完成后,我们调用系统过程SP_TABLESPACE_RECOVER(ts_name)完成失效文件的恢复。

02 恢复示例

下面我们就在测试环境下进行一次恢复演练。

1)准备测试环境

image.png

2) OS模拟删除数据文件

这里删除表空间BIGDATA的数据文件BIGDATA02.DBF

image.png

DM7中再次执行刚才的查询语句,并没有报错,这是因为DM7缺省不启动表空间文件失效检查

image.png

手动执行系统过程SP_FILE_SYS_CHECK(),进行手工表空间失效检查,再次执行查询语句,报错提示文件已被删除。

image.png

3)恢复数据文件

首先我们调用达梦数据库自带的系统过程  SP_TABLESPACE_PREPARE_RECOVER (tablespace_name) 准备恢复。

image.png

然后,查找DM7进程ID和被删除的文件。

image.png

以上可以看到,达梦进程下的第49号文件被标记为DELETED状态。

再将文件复制到原来的位置。

image.png

然后我们调用达梦数据库自带的系统过程SP_TABLESPACE_RECOVER(ts_name)完成表空间失效文件的恢复。

image.png

最后验证恢复结果。

image.png

03 参考文档

DM7系统管理员手册 — 第15章数据库布局和存储管理 — 15.1管理表空间


美创运维中心数据库服务团队拥有Oracle ACE 1人、OCM 10余人、数十名Oracle OCP、MySQL OCP、红帽RHCA、中间件weblogic、tuxedo认证、达梦工程师 ,著有《Oracle DBA实战攻略》,《Oracle数据库性能优化方法和最佳实践》,《Oracle内核技术揭秘》等多本数据运维优化书籍。目前运维各类数据库合计2000余套,精通Oracle、MySQL、SQLServer、DB2、PostgreSQL、达梦等主流商业和开源数据库。并成为首批国内达梦战略合作伙伴之一,拥有海量经验和完善的人员培养体系。并同时提供超融合,私有云整体解决方案。

来源:freebuf.com 2020-05-29 15:58:04 by: database

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论