暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

达梦数据库误删数据文件恢复(未重启)

原创 💨 狒狒啊 2022-06-16
1845

LINUX 操作系统中,被进程打开的文件仍可以在 OS 系统中被删除,因此存在 DM 数据文件可能被误删的风险。如果数据文件被删除,DM 系统能够及时检测出来,并立刻停止对其继续使用并通知用户。在 dm.ini 中参数FIL_CHECK_INTERVAL 的值指定 DM 系统检查数据文件是否仍存在的时间间隔。将其设为 0 表示不进行检查。也可以通过系统过程 SP_FILE_SYS_CHECK()来手动的进行检查。系统一旦检测出某个表空间内的数据文件被删除,则与该表空间所有的操作都将会失败,并报错该表空间内有数据文件被删除。

如:

SQL> create table tt (id number) tablespace tbs1_new;

操作已执行

SQL> select tablespace_name,file_name from dba_data_files;

行号

TABLESPACE_NAME FILE_NAME

---------- --------------- ---------------------------------

1  SYSTEM  /opt/dm8/data/DAMENG/SYSTEM.DBF

2  TBS1_NEW  /opt/dm8/data/DAMENG/tbs102.dbf

3  TBS1_NEW  /opt/dm8/data/DAMENG/tbs101.dbf

...

SQL> host rm -f /opt/dm8/data/DAMENG/tbs101.dbf

SQL> host rm -f /opt/dm8/data/DAMENG/tbs102.dbf

SQL> SP_FILE_SYS_CHECK();

DMSQL 过程已成功完成

已用时间: 0.985(毫秒). 执行号:10.

SQL> select * from tt;

select * from tt;

[-3430]:表空间[TBS1_NEW]中文件[/opt/dm8/data/DAMENG/tbs101.dbf]已被删除.

已用时间: 0.845(毫秒). 执行号:0.

LINUX 系统中被删除的文件,只要其句柄没有被关闭,可以在/proc/<pid>/fd 中找到其对应的文件副本。其中<pid>指打开该文件的进程 id。利用该方法,结合 OS 命令,DM 提供失效文件的恢复方案如下:

1、 调用系统过程 SP_TABLESPACE_PREPARE_RECOVER(tablespace_name)准备进行恢复;

SQL> SP_TABLESPACE_PREPARE_RECOVER('TBS1_NEW');

DMSQL 过程已成功完成

已用时间: 1.650(毫秒). 执行号:12.


2、 如果使用过程中 DM 报错表空间数据文件被删除, 通过操作系统的 ps 命令找到当前 dmserver 的

PID:

[dmdba@enmoedu1 log]$ ps -ef | grep dmserver

dmdba   27971  1 0 19:14 pts/3  00:00:04 /opt/dm8/bin/dmserver /opt/dm8/data/DAMENG/dm.ini -noconsole

3、 使用操作系统 ls 命令查看被删除文件对应的副本:ls /proc/<PID>/fd–l,会发现被删除的文件后有(deleted)字样;

[dmdba@enmoedu1 log]$ ll /proc/27971/fd

总用量 0

lr-x------ 1 dmdba dinstall 64 8月 28 19:25 0 -> /dev/null

l-wx------ 1 dmdba dinstall 64 8月 28 19:25 1 -> /opt/dm8/log/DmServiceDMSERVER.log

lrwx------ 1 dmdba dinstall 64 8月 28 19:25 10 -> /opt/dm8/data/DAMENG/MAIN.DBF

lrwx------ 1 dmdba dinstall 64 8月 28 19:25 11 -> /opt/dm8/data/DAMENG/test01.dbf

lrwx------ 1 dmdba dinstall 64 8月 28 19:25 12 -> /opt/dm8/data/DAMENG/tbs101.dbf (deleted)

lrwx------ 1 dmdba dinstall 64 8月 28 19:25 13 -> /opt/dm8/data/DAMENG/ROLL.DBF

lrwx------ 1 dmdba dinstall 64 8月 28 19:25 14 -> /opt/dm8/data/DAMENG/DMHR.DBF

lrwx------ 1 dmdba dinstall 64 8月 28 19:25 15 -> /home/dmdba/test101.dbf

lrwx------ 1 dmdba dinstall 64 8月 28 19:25 16 -> /opt/dm8/data/DAMENG/tbs102.dbf (deleted)


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

[dmdba@enmoedu1 log]$ cp /proc/27971/fd/12 /opt/dm8/data/DAMENG/tbs101.dbf

[dmdba@enmoedu1 log]$ cp /proc/27971/fd/16 /opt/dm8/data/DAMENG/tbs102.dbf


5、 复制成功后, 调用系统过程 SP_TABLESPACE_RECOVER(ts_name)完成表空间失效文件的恢复。

SQL> SP_TABLESPACE_RECOVER('TBS1_NEW');

DMSQL 过程已成功完成

已用时间: 32.743(毫秒). 执行号:13.

验证结果:

SQL> SP_FILE_SYS_CHECK();

DMSQL 过程已成功完成

已用时间: 4.244(毫秒). 执行号:14.

SQL> select * from tt;

行号

ID

---------- --

1

注意:要保证数据文件正确修复,需要保证在 SP_TABLESPACE_PREPARE_RECOVER 后进行数据文件的复制。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论