达梦数据库,数据文件被误删除,无备份,如何恢复?
·
注意:
1.本文误删除是指操作系统级别的rm 误删除,不是 drop tablesapce 误删除。
2.rm 误删除数据文件后,如果数据库实例没有关闭,可以通过文件句柄进行恢复。
3.恢复过程中,达梦有一些特有的命令,和其他数据库恢复方式略有有区别:
sp_file_sys_check();
sp_tablespace_prepare_recover('chen');
sp_tablespace_recover('chen');
完整步骤如下:
一:创建测试数据
disql cjc/***:5238
create tablespace chen datafile '/dm8/data/CJC/chen.dbf' size 128;
create tablespace chen datafile '/dm8/data/CJC/chen.dbf' size 128;
create user chen identified by "******" default tablespace chen default index tablespace chen;
grant dba to chen;
exit;
disql chen/******:5238
create table t1(id int);
insert into t1 values(1),(2),(3);
commit;
select * from t1;
行号 id
---------- -----------
1 1
2 2
3 3
已用时间: 1.032(毫秒). 执行号:604.
二:查看信息
select owner,tablespace_name from dba_tables where table_name='t1';
行号 owner tablespace_name
---------- ----- ---------------
1 CJC CJC
2 CHEN chen
已用时间: 71.929(毫秒). 执行号:605.
select file_name from dba_data_files where tablespace_name='chen';
行号 file_name
---------- ----------------------
1 /dm8/data/CJC/chen.dbf
已用时间: 9.127(毫秒). 执行号:606.
三:模拟误删除
SQL> host rm -f /dm8/data/CJC/chen.dbf
SQL> host ls -l /dm8/data/CJC/chen.dbf
ls: cannot access /dm8/data/CJC/chen.dbf: No such file or directory
四:影响范围
数据文件被删除,短时间内,还可以继续查看和写入数据
SQL> select * from chen.t1;
行号 id
---------- -----------
1 1
2 2
3 3
已用时间: 0.490(毫秒). 执行号:607.
SQL> insert into chen.t1 values(4),(5);
影响行数 2
已用时间: 0.723(毫秒). 执行号:608.
SQL> commit;
操作已执行
已用时间: 0.963(毫秒). 执行号:609.
SQL> select * from chen.t1;
行号 id
---------- -----------
1 1
2 2
3 3
4 4
5 5
已用时间: 0.281(毫秒). 执行号:610.
五:检查数据文件
SQL> sp_file_sys_check();
DMSQL 过程已成功完成
已用时间: 3.113(毫秒). 执行号:612.
后台日志报错:
[dmdba@cjc-db-11 log]$ tail -10f dm_CJC_202605.log
......
2026-05-22 10:12:55.917 [ERROR] database P0000001995 T0000000000000002328 [EID:49]fil_sys check file [/dm8/data/CJC/chen.dbf] fail, Can't find file
无法查看数据:
SQL> select * from chen.t1;
select * from chen.t1;
[-3433]:表空间处于脱机状态.
已用时间: 0.177(毫秒). 执行号:0.
六:解决方案
1.准备恢复
SQL> sp_tablespace_prepare_recover('chen');
DMSQL 过程已成功完成
已用时间: 0.414(毫秒). 执行号:613.
2.拷贝句柄文件
[root@cjc-db-11 ~]# ps -ef|grep dms|grep -v grep
dmdba 1995 1 0 09:59 pts/0 00:00:03 /dm8/dbms/bin/dmserver path=/dm8/data/CJC/dm.ini -noconsole
[root@cjc-db-11 ~]# ls -lrth /proc/1995/fd|grep dele
lrwx------ 1 dmdba dinstall 64 May 22 10:04 46 -> /dm8/data/CJC/chen.dbf (delted)
[root@cjc-db-11 ~]# cp /proc/1995/fd/46 /dm8/data/CJC/chen.dbf
[root@cjc-db-11 ~]# chown dmdba:dinstall /dm8/data/CJC/chen.dbf
3.恢复
SQL> sp_tablespace_recover('chen');
DMSQL 过程已成功完成
已用时间: 9.308(毫秒). 执行号:614.
4.再次检查数据文件
SQL> sp_file_sys_check();
DMSQL 过程已成功完成
已用时间: 3.196(毫秒). 执行号:615.
5.恢复正常,可以正常读写数据
SQL> select * from chen.t1;
行号 id
---------- -----------
1 1
2 2
3 3
4 4
5 5
已用时间: 0.260(毫秒). 执行号:616.
SQL> insert into chen.t1 values(6);
影响行数 1
已用时间: 0.779(毫秒). 执行号:617.
SQL> commit;
操作已执行
已用时间: 0.952(毫秒). 执行号:618.
更多推荐

所有评论(0)