freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

运维日记|达梦数据库DM7误删数据文件的快速恢复
2020-05-29 15:58:04

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 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者