达梦数据库DM7数据文件误删除恢复

达梦数据库DM7数据文件误删除恢复

在DM7中,有两个与数据文件恢复有关的特性。

数据文件失效检查 

在DM.ini中参数FIL_CHECK_INTERVAL的值指定dm7系统检查数据文件还存在的时间间隔,设为0表示不检查。

也可通过系统过程SP_FILE_SYS_CHECK()进行手工检查。

数据文件失效恢复

Linux系统中被删除的文件,在没有重启的情况下,文件句柄还没有关闭,可以在/proc/ /fd 中找到其对应的文件副本。

利用此办法,结合os命令,在DM7中可以通过调用系统过程SP_TABLESPACE_PREPARE_RECOVER

和SP_TABLESPACE_RECOVER来恢复被误删除的数据文件。

1、准备测试环境

SQL> create tablespace cc datafile'/dmdata/data/DM01/cc01.dbf' size 100,'/dmdata/data/DM01/cc02.dbf' size 100;

操作已执行

SQL> select tablespace_name, file_name, status from dba_data_files order by 1;

行号     TABLESPACE_NAME FILE_NAME                      STATUS   

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

1          BOOKSHOP        /dmdata/data/DM01/BOOKSHOP.DBF AVAILABLE

2          CC              /dmdata/data/DM01/cc02.dbf     AVAILABLE

3          CC              /dmdata/data/DM01/cc01.dbf     AVAILABLE

4          DMHR            /dmdata/data/DM01/DMHR.DBF     AVAILABLE

5          MAIN            /dmdata/data/DM01/MAIN.DBF     AVAILABLE

6          ROLL            /dmdata/data/DM01/ROLL.DBF     AVAILABLE

7          SYSTEM          /dmdata/data/DM01/SYSTEM.DBF   AVAILABLE

8          TEMP            /dmdata/data/DM01/TEMP.DBF     AVAILABLE

8 rows got

SQL> create tablespace cc datafile'/dmdata/data/DM01/cc01.dbf' size 100,'/dmdata/data/DM01/cc02.dbf' size 100;

操作已执行

已用时间: 24.231(毫秒). 执行号:6.

SQL> create user test identified by dameng123 default tablespace cc;

操作已执行

已用时间: 10.973(毫秒). 执行号:7.

SQL> grant dba,resource to test;

操作已执行

已用时间: 7.763(毫秒). 执行号:8.

SQL> conn test/dameng123

SQL> create table t1 as select * from dba_data_files;

操作已执行

已用时间: 19.126(毫秒). 执行号:9.

SQL> select count(*) from t1;

行号     COUNT(*)            

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

1          8

2、模拟删除文件

[dmdba@localhost ~]$ rm -rf /dmdata/data/DM01/cc01.dbf

SQL> select count(*) from t1;

行号     COUNT(*)            

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

1          8

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

执行失效检查系统进程

SQL> call SP_FILE_SYS_CHECK();    

DMSQL 过程已成功完成

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

SQL> select count(*) from t1;

select count(*) from t1;

[-3430]:表空间[CC]中文件[/dmdata/data/DM01/cc01.dbf]已被删除.

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


3、恢复数据文件

执行准备恢复过程

SQL> call sp_tablespace_prepare_recover('CC');

DMSQL 过程已成功完成

已用时间: 0.351(毫秒). 执行号:15.

查看DM7进程ID

[dmdba@localhost ~]$ ps -ef|grep dmserver

dmdba      2304      1  0 08:25 ?        00:00:02 /dm7/bin/dmserver /dmdata/data/DM01/dm.ini -noconsole

dmdba      2885   2817  0 08:35 pts/0    00:00:00 grep dmserver

查看被删除文件,以下可知对应的文件号是14

[dmdba@localhost ~]$ ls /proc/2304/fd -l

总用量 0

lr-x------ 1 dmdba dinstall 64 11月 16 08:36 0 -> /dev/null

l-wx------ 1 dmdba dinstall 64 11月 16 08:36 1 -> /dm7/log/S98DmServiceTEST01.log

lrwx------ 1 dmdba dinstall 64 11月 16 08:36 10 -> /dmdata/data/DM01/BOOKSHOP.DBF

lrwx------ 1 dmdba dinstall 64 11月 16 08:36 11 -> /dmdata/data/DM01/DMHR.DBF

lrwx------ 1 dmdba dinstall 64 11月 16 08:36 12 -> /dmdata/data/DM01/ROLL.DBF

lrwx------ 1 dmdba dinstall 64 11月 16 08:36 13 -> /dmdata/data/DM01/MAIN.DBF

lrwx------ 1 dmdba dinstall 64 11月 16 08:36 14 -> /dmdata/data/DM01/cc01.dbf (deleted)

lrwx------ 1 dmdba dinstall 64 11月 16 08:36 15 -> /dmdata/arch/ARCHIVE_LOCAL1_20191116082533913_0.log

........以下省略

复制文件到原来的位置

[dmdba@localhost ~]$ cp /proc/2304/fd/14 /dmdata/data/DM01/cc01.dbf

执行恢复过程

SQL> call sp_tablespace_recover('CC');

DMSQL 过程已成功完成

已用时间: 9.973(毫秒). 执行号:16.

再次执行失效检查系统进程,验证恢复,无报错

SQL> call SP_FILE_SYS_CHECK();

DMSQL 过程已成功完成

已用时间: 0.182(毫秒). 执行号:19.

SQL> select count(*) from t1;

行号     COUNT(*)            

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

1          8

已用时间: 0.150(毫秒). 执行号:17.

SQL> select tablespace_name, file_name, status from dba_data_files order by 1;

行号     TABLESPACE_NAME FILE_NAME                      STATUS   

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

1          BOOKSHOP        /dmdata/data/DM01/BOOKSHOP.DBF AVAILABLE

2          CC              /dmdata/data/DM01/cc02.dbf     AVAILABLE

3          CC              /dmdata/data/DM01/cc01.dbf     AVAILABLE

4          DMHR            /dmdata/data/DM01/DMHR.DBF     AVAILABLE

5          MAIN            /dmdata/data/DM01/MAIN.DBF     AVAILABLE

6          ROLL            /dmdata/data/DM01/ROLL.DBF     AVAILABLE

7          SYSTEM          /dmdata/data/DM01/SYSTEM.DBF   AVAILABLE

8          TEMP            /dmdata/data/DM01/TEMP.DBF     AVAILABLE

8 rows got

已用时间: 47.629(毫秒). 执行号:18.

误删除数据文件恢复完成。