• Linux 恢复rm -rf命令所删除的达梦数据文件


    点击链接阅读原文,提升阅读体验: https://www.modb.pro/db/21852?cyn  

    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.

    到此,在Linux系统中恢复被删除的表空间文件恢复成功了。

    本文转载至墨天轮社区

    文章来源: https://www.modb.pro/db/21852?cyn 

    ———— / END / ————

  • 相关阅读:
    【代码笔记】iOS-NSLog的使用
    【代码笔记】iOS-NSJSONSerializationDemo
    【代码笔记】iOS-My97DatePicker日历
    【代码笔记】iOS-mp3的播放
    【代码笔记】iOS-MBProgressHUDDemo
    【代码笔记】iOS-MBProgressHUD
    【代码笔记】iOS-导航条的标题(label)
    【代码笔记】iOS-Label随字自动变大
    OC语言构造方法
    iOS开发UI篇—在ImageView中添加按钮以及Tag的参数说明
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13311771.html
Copyright © 2020-2023  润新知