共计 6853 个字符,预计需要花费 18 分钟才能阅读完成。
这篇文章主要介绍了 Linux 如何恢复 rm -rf 命令所删除的数据文件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。
LINUX 系统中被删除的文件,只要其句柄没有被关闭,可以在 /proc//fd 中找到其对应的文件副本。其中指打开该文件的进程 id。利用该方法,结合 OS 命令,DM7 提供失效文件的恢复方案,下面用示例来演示:
1. 创建一个表空间 cs,给其创建两个数据文件
SQL create tablespace cs datafile‘/dm_home/dmdba/dmdbms/data/jydm/cs1.dbf’size 128,’/dm_home/dmdba/dmdbms/data/jydm/cs.dbf’size 128;
executed successfully
used time: 00:00:21.941. Execute id is 90.
2. 找出达梦服务器进程 ID
[root@cs1 jydm]# ps -ef | grep dmserver
dmdba 2467 1 0 10 月 15 ? 00:05:53 /dm_home/dmdba/dmdbms/bin/dmserver /dm_home/dmdba/dmdbms/data/jydm/dm.ini -noconsole
root 18893 18058 0 21:45 pts/1 00:00:00 grep –color=auto dmserver
3. 显示达梦服务器进程所打开的文件列表
[root@cs1 jydm]# ls /proc/2467/fd -l
总用量 0
lr-x—— 1 dmdba dinstall 64 10 月 15 12:23 0 – /dev/null
l-wx—— 1 dmdba dinstall 64 10 月 15 12:23 1 – /dm_home/dmdba/dmdbms/log/DmServicejydm.log
lrwx—— 1 dmdba dinstall 64 10 月 15 12:23 10 – /dm_home/dmdba/dmdbms/data/jydm/ROLL.DBF
lrwx—— 1 dmdba dinstall 64 10 月 15 12:23 11 – /dm_home/dmdba/dmdbms/data/jydm/MAIN.DBF
lrwx—— 1 dmdba dinstall 64 10 月 15 12:23 12 – /dm_home/dmdba/dmdbms/data/jydm/BOOKSHOP.DBF
lrwx—— 1 dmdba dinstall 64 10 月 15 12:23 13 – /dm_home/dmdba/dmdbms/data/jydm/DMHR.DBF
lr-x—— 1 dmdba dinstall 64 10 月 15 12:23 14 – pipe:[21853]
l-wx—— 1 dmdba dinstall 64 10 月 15 12:23 15 – pipe:[21853]
lr-x—— 1 dmdba dinstall 64 10 月 15 12:23 16 – pipe:[21854]
l-wx—— 1 dmdba dinstall 64 10 月 15 12:23 17 – pipe:[21854]
lr-x—— 1 dmdba dinstall 64 10 月 15 12:23 18 – pipe:[21855]
l-wx—— 1 dmdba dinstall 64 10 月 15 12:23 19 – pipe:[21855]
l-wx—— 1 dmdba dinstall 64 10 月 15 12:23 2 – /dm_home/dmdba/dmdbms/log/DmServicejydm.log
lr-x—— 1 dmdba dinstall 64 10 月 15 12:23 20 – pipe:[21856]
l-wx—— 1 dmdba dinstall 64 10 月 15 12:23 21 – pipe:[21856]
lrwx—— 1 dmdba dinstall 64 10 月 25 21:12 22 – socket:[297043807]
lrwx—— 1 dmdba dinstall 64 10 月 25 21:12 23 – /dm_home/dmdba/dmdbms/data/jydm/cs1.dbf
lrwx—— 1 dmdba dinstall 64 10 月 25 21:42 24 – /dm_home/dmdba/dmdbms/data/jydm/cs.dbf
lrwx—— 1 dmdba dinstall 64 10 月 15 12:23 3 – socket:[20041]
lrwx—— 1 dmdba dinstall 64 10 月 15 12:23 4 – socket:[20042]
lrwx—— 1 dmdba dinstall 64 10 月 15 12:23 5 – /dm_home/dmdba/dmdbms/data/jydm/SYSTEM.DBF
lrwx—— 1 dmdba dinstall 64 10 月 15 12:23 6 – /dm_home/dmdba/dmdbms/data/jydm/dminst.sys
lrwx—— 1 dmdba dinstall 64 10 月 15 12:23 7 – /dm_home/dmdba/dmdbms/data/jydm/TEMP.DBF
lrwx—— 1 dmdba dinstall 64 10 月 15 12:23 8 – /dm_home/dmdba/dmdbms/data/jydm/jydm01.log
lrwx—— 1 dmdba dinstall 64 10 月 15 12:23 9 – /dm_home/dmdba/dmdbms/data/jydm/jydm02.log
4. 删除表空间 cs 中的一个数据文件
[root@cs1 jydm]# rm -rf cs.dbf
5. 通过调用系统过程 SP_FILE_SYS_CHECK()来手动的对表空间失效文件进行检查。
SQL call SP_FILE_SYS_CHECK();
DMSQL executed successfully
used time: 0.690(ms). Execute id is 93.
6. 在表空间 cs 中创建一个测试表 cs,命令执行出错,显示表空间 cs 中的 cs.dbf 文件已经被删除了。
SQL create table cs(cs_id number) tablespace cs;
create table cs(cs_id number) tablespace cs;
[-3430]:tablespace[CS] file[/dm_home/dmdba/dmdbms/data/jydm/cs.dbf] has been deleted.
used time: 31.462(ms). Execute id is 0.
7. 调用系统过程 SP_TABLESPACE_PREPARE_RECOVER(tablespace_name)准备进行恢复
SQL call SP_TABLESPACE_PREPARE_RECOVER(‘CS’);
DMSQL executed successfully
used time: 16.121(ms). Execute id is 95.
8. 显示达梦服务器进程所打开的文件列表,可以看到 cs.dbf 文件被标示为 deleted 了。
[root@cs1 jydm]# ls /proc/2467/fd -l
总用量 0
lr-x—— 1 dmdba dinstall 64 10 月 15 12:23 0 – /dev/null
l-wx—— 1 dmdba dinstall 64 10 月 15 12:23 1 – /dm_home/dmdba/dmdbms/log/DmServicejydm.log
lrwx—— 1 dmdba dinstall 64 10 月 15 12:23 10 – /dm_home/dmdba/dmdbms/data/jydm/ROLL.DBF
lrwx—— 1 dmdba dinstall 64 10 月 15 12:23 11 – /dm_home/dmdba/dmdbms/data/jydm/MAIN.DBF
lrwx—— 1 dmdba dinstall 64 10 月 15 12:23 12 – /dm_home/dmdba/dmdbms/data/jydm/BOOKSHOP.DBF
lrwx—— 1 dmdba dinstall 64 10 月 15 12:23 13 – /dm_home/dmdba/dmdbms/data/jydm/DMHR.DBF
lr-x—— 1 dmdba dinstall 64 10 月 15 12:23 14 – pipe:[21853]
l-wx—— 1 dmdba dinstall 64 10 月 15 12:23 15 – pipe:[21853]
lr-x—— 1 dmdba dinstall 64 10 月 15 12:23 16 – pipe:[21854]
l-wx—— 1 dmdba dinstall 64 10 月 15 12:23 17 – pipe:[21854]
lr-x—— 1 dmdba dinstall 64 10 月 15 12:23 18 – pipe:[21855]
l-wx—— 1 dmdba dinstall 64 10 月 15 12:23 19 – pipe:[21855]
l-wx—— 1 dmdba dinstall 64 10 月 15 12:23 2 – /dm_home/dmdba/dmdbms/log/DmServicejydm.log
lr-x—— 1 dmdba dinstall 64 10 月 15 12:23 20 – pipe:[21856]
l-wx—— 1 dmdba dinstall 64 10 月 15 12:23 21 – pipe:[21856]
lrwx—— 1 dmdba dinstall 64 10 月 25 21:12 22 – socket:[297043807]
lrwx—— 1 dmdba dinstall 64 10 月 25 21:12 23 – /dm_home/dmdba/dmdbms/data/jydm/cs1.dbf
lrwx—— 1 dmdba dinstall 64 10 月 25 21:42 24 – /dm_home/dmdba/dmdbms/data/jydm/cs.dbf (deleted)
lrwx—— 1 dmdba dinstall 64 10 月 15 12:23 3 – socket:[20041]
lrwx—— 1 dmdba dinstall 64 10 月 15 12:23 4 – socket:[20042]
lrwx—— 1 dmdba dinstall 64 10 月 15 12:23 5 – /dm_home/dmdba/dmdbms/data/jydm/SYSTEM.DBF
lrwx—— 1 dmdba dinstall 64 10 月 15 12:23 6 – /dm_home/dmdba/dmdbms/data/jydm/dminst.sys
lrwx—— 1 dmdba dinstall 64 10 月 15 12:23 7 – /dm_home/dmdba/dmdbms/data/jydm/TEMP.DBF
lrwx—— 1 dmdba dinstall 64 10 月 15 12:23 8 – /dm_home/dmdba/dmdbms/data/jydm/jydm01.log
lrwx—— 1 dmdba dinstall 64 10 月 15 12:23 9 – /dm_home/dmdba/dmdbms/data/jydm/jydm02.log
9. 使用操作系统的 cp 命令将文件 (cs.dbf) 复制到原位置
[root@cs1 jydm]# cp /proc/2467/fd/24 /dm_home/dmdba/dmdbms/data/jydm/cs.dbf
[root@cs1 jydm]# ls -lrt
总用量 1365112
drwxr-xr-x 2 dmdba dinstall 6 7 月 23 22:12 bak
-rw-r–r– 1 dmdba dinstall 479 7 月 23 22:12 sqllog.ini
-rw-r–r– 1 dmdba dinstall 633 7 月 23 22:13 dm_service.prikey
drwxr-xr-x 2 dmdba dinstall 6 7 月 23 22:14 HMAIN
-rw-r–r– 1 dmdba dinstall 908 7 月 23 22:14 dminit20180723221249.log
-rw-r–r– 1 dmdba dinstall 890 7 月 23 22:14 dmarch_example.ini
-rw-r–r– 1 dmdba dinstall 1966 7 月 23 22:14 dmdcr_cfg_example.ini
-rw-r–r– 1 dmdba dinstall 631 7 月 23 22:14 dmdcr_example.ini
-rw-r–r– 1 dmdba dinstall 2070 7 月 23 22:14 dmmal_example.ini
-rw-r–r– 1 dmdba dinstall 1537 7 月 23 22:14 dminit_example.ini
-rw-r–r– 1 dmdba dinstall 1277 7 月 23 22:14 dmmonitor_example.ini
-rw-r–r– 1 dmdba dinstall 1679 7 月 23 22:14 dmtimer_example.ini
-rw-r–r– 1 dmdba dinstall 288 7 月 23 22:14 dmmpp_example.ini
-rw-r–r– 1 dmdba dinstall 1241 7 月 23 22:14 dmwatch_example.ini
-rw-r–r– 1 dmdba dinstall 2146 7 月 23 22:14 dmwatcher_example.ini
-rw-r–r– 1 dmdba dinstall 522 7 月 23 22:14 dmwmon_example.ini
-rw-r–r– 1 dmdba dinstall 636 7 月 23 22:14 sqllog_example.ini
drwxr-xr-x 2 dmdba dinstall 6 7 月 23 22:14 trace
-rw-r–r– 1 dmdba dinstall 12 7 月 23 22:14 rep_conflict.log
-rw-r–r– 1 dmdba dinstall 157286400 7 月 23 22:16 BOOKSHOP.DBF
-rw-r–r– 1 dmdba dinstall 134217728 7 月 23 22:16 DMHR.DBF
-rw-r–r– 1 dmdba dinstall 40859 8 月 20 15:20 dm.ini
-rw-r–r– 1 dmdba dinstall 10485760 10 月 15 12:21 TEMP.DBF
-rw-r–r– 1 dmdba dinstall 268435456 10 月 15 12:21 jydm02.log
-rw-r–r– 1 dmdba dinstall 134217728 10 月 25 21:24 MAIN.DBF
-rw-r–r– 1 dmdba dinstall 134217728 10 月 25 21:43 cs1.dbf
-rw-r–r– 1 dmdba dinstall 7168 10 月 25 21:43 dm.ctl
drwxr-xr-x 2 dmdba dinstall 4096 10 月 25 21:43 ctl_bak
-rw-r–r– 1 dmdba dinstall 134217728 10 月 25 21:43 ROLL.DBF
-rw-r–r– 1 dmdba dinstall 22020096 10 月 25 21:59 SYSTEM.DBF
-rw-r–r– 1 dmdba dinstall 268435456 10 月 25 21:59 jydm01.log
-rw-r–r– 1 root root 134217728 10 月 25 21:59 cs.dbf
-rw-r–r– 1 dmdba dinstall 220 10 月 25 21:59 dminst.sys
10. 复制成功后,调用系统过程 SP_TABLESPACE_RECOVER(ts_name)完成表空间失效文件的恢复。注意,要保证数据文件正确修复,需要保证在 SP_TABLESPACE_PREPARE_RECOVER 后进行数据文件的复制。
SQL call SP_TABLESPACE_RECOVER(‘CS’);
DMSQL executed successfully
used time: 46.532(ms). Execute id is 96.
11. 再次在表空间 cs 中创建测试表 cs 命令成功执行
SQL create table cs(cs_id number) tablespace cs;
executed successfully
used time: 36.913(ms). Execute id is 97.
感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“Linux 如何恢复 rm -rf 命令所删除的数据文件”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!