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)准备测试环境
2) OS模拟删除数据文件
这里删除表空间BIGDATA的数据文件BIGDATA02.DBF
DM7中再次执行刚才的查询语句,并没有报错,这是因为DM7缺省不启动表空间文件失效检查
手动执行系统过程SP_FILE_SYS_CHECK(),进行手工表空间失效检查,再次执行查询语句,报错提示文件已被删除。
3)恢复数据文件
首先我们调用达梦数据库自带的系统过程 SP_TABLESPACE_PREPARE_RECOVER (tablespace_name) 准备恢复。
然后,查找DM7进程ID和被删除的文件。
以上可以看到,达梦进程下的第49号文件被标记为DELETED状态。
再将文件复制到原来的位置。
然后我们调用达梦数据库自带的系统过程SP_TABLESPACE_RECOVER(ts_name)完成表空间失效文件的恢复。
最后验证恢复结果。
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
请登录后发表评论
注册