注意:
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.
欢迎关注我的公众号《 IT小Chen》