小编今天给大家来一篇达梦数据库的运维日记:在不小心误删DM7数据文件后,如何利用DM7特性去快速恢复数据文件。
01
概念说明
在达梦数据库中,有两个与数据文件恢复相关的重要特性。
1)表空间文件失效检查
在Liunx系统中,由于被进程打开的文件仍可以在OS系统中被删除,因此DM7存在数据文件被误删的风险。
表空间文件失效检查,就是能够以自动或手动的方式检测出被删除的数据文件,并立刻停止相关表空间的使用。
在参数文件dm.ini中指定 FIL_CHECK_INTERVAL 值,可以设置自动检查数据文件是否存在的时间间隔。也可以使用手动方式,通过执行系统过程SP_FILE_SYS_CHECK()去检查数据文件是否存在。
DM7系统一旦检测出某个表空间内的数据文件被删除,则与该表空间所有的操作都将会失败,并报错该表空间内数据文件被删除。
2)表空间失效文件恢复。
linux系统中被删除的文件,只要其句柄没有被关闭,那可以在/proc//fd中找到其对应的文件副本。利用此办法,结合DM7系统过程,就可以做到快速恢复被误删除的数据文件,步骤如下:
1、首先我们先调用达梦数据库自带的系统过程 SP_TABLESPACE_PREPARE_RECOVER (tablespace_name),准备恢复。
2、通过操作系统ps命令找到当前dmserver的PID:ps –ef|grep dmserver
3、使用操作系统ls命令查看被删除文件对应的副本:ls /proc// 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管理表空间