主頁 > 知識庫 > Linux(Unix)中誤刪除的文件恢復方法

Linux(Unix)中誤刪除的文件恢復方法

熱門標簽:漳州外呼系統(tǒng)怎么樣 內(nèi)蒙古電信外呼系統(tǒng) 天津人工電銷機器人費用 哪個地圖標注更清晰 曲阜地圖標注app 開封400電話辦理價格 地圖標注小區(qū)項目入駐 4s店如何在百度地圖標注 凱立德劇院地圖標注
在Linux下大致重新演示一下恢復的過程,恢復的步驟與數(shù)據(jù)庫版本沒有太大關(guān)系,與操作系統(tǒng)的不同會有所不同。

1. 在數(shù)據(jù)庫open的時候,直接刪除users表空間中的數(shù)據(jù)文件。

復制代碼
代碼如下:

SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/app/oracle/oradata/ORCL/datafile/o1_mf_system_555wqbnk_.dbf
/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_555wqxgl_.dbf
/app/oracle/oradata/ORCL/datafile/o1_mf_sysaux_555wr5p6_.dbf
/app/oracle/oradata/ORCL/datafile/o1_mf_users_555wrj4o_.dbf
SQL> host rm /app/oracle/oradata/ORCL/datafile/o1_mf_users_555wrj4o_.dbf

2. 嘗試在users表空間中創(chuàng)建表,開始報錯。

復制代碼
代碼如下:

SQL> create table t tablespace users as select * from dual;
create table t tablespace users as select * from dual
*
ERROR at line 1:
ORA-01116: error in opening database file 4
ORA-01110: data file 4:
'/app/oracle/oradata/ORCL/datafile/o1_mf_users_555wrj4o_.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3

在告警日志中,同樣也可以看到類似信息。

復制代碼
代碼如下:

Mon Dec 19 21:48:17 CST 2011
Errors in file /app/oracle/admin/orcl/bdump/orcl_m000_3897.trc:
ORA-01116: error in opening database file 4
ORA-01110: data file 4: '/app/oracle/oradata/ORCL/datafile/o1_mf_users_555wrj4o_.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3

3. 檢查dbwr的進程PID

復制代碼
代碼如下:

$ ps -ef|grep dbw0|grep -v grep
oracle 2879 1 0 21:38 ? 00:00:00 ora_dbw0_orcl

4. dbwr會打開所有數(shù)據(jù)文件的句柄。在proc目錄中可以查到,目錄名是進程PID,fd表示文件描述符。

復制代碼
代碼如下:

$ cd /proc/2879/fd
$ ls -l
total 0
lr-x------ 1 oracle dba 64 Dec 19 21:50 0 -> /dev/null
lr-x------ 1 oracle dba 64 Dec 19 21:50 1 -> /dev/null
lr-x------ 1 oracle dba 64 Dec 19 21:50 10 -> /dev/zero
lr-x------ 1 oracle dba 64 Dec 19 21:50 11 -> /dev/zero
lr-x------ 1 oracle dba 64 Dec 19 21:50 12 -> /app/oracle/product/10.2.0/db_1/rdbms/mesg/oraus.msb
lrwx------ 1 oracle dba 64 Dec 19 21:50 13 -> /app/oracle/product/10.2.0/db_1/dbs/hc_orcl.dat
lrwx------ 1 oracle dba 64 Dec 19 21:50 14 -> /app/oracle/product/10.2.0/db_1/dbs/lkORCL
lrwx------ 1 oracle dba 64 Dec 19 21:50 15 -> /app/oracle/oradata/ORCL/controlfile/o1_mf_555wq3ng_.ctl
lrwx------ 1 oracle dba 64 Dec 19 21:50 16 -> /app/oracle/oradata/ORCL/datafile/o1_mf_system_555wqbnk_.dbf
lrwx------ 1 oracle dba 64 Dec 19 21:50 17 -> /app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_555wqxgl_.dbf
lrwx------ 1 oracle dba 64 Dec 19 21:50 18 -> /app/oracle/oradata/ORCL/datafile/o1_mf_sysaux_555wr5p6_.dbf
lrwx------ 1 oracle dba 64 Dec 19 21:50 19 -> /app/oracle/oradata/ORCL/datafile/o1_mf_users_555wrj4o_.dbf (deleted)
lr-x------ 1 oracle dba 64 Dec 19 21:50 2 -> /dev/null
lrwx------ 1 oracle dba 64 Dec 19 21:50 20 -> /app/oracle/oradata/ORCL/datafile/o1_mf_temp_555wrbnz_.tmp
lr-x------ 1 oracle dba 64 Dec 19 21:50 21 -> /app/oracle/product/10.2.0/db_1/rdbms/mesg/oraus.msb
lr-x------ 1 oracle dba 64 Dec 19 21:50 3 -> /dev/null
lr-x------ 1 oracle dba 64 Dec 19 21:50 4 -> /dev/null
l-wx------ 1 oracle dba 64 Dec 19 21:50 5 -> /app/oracle/admin/orcl/udump/orcl_ora_2871.trc
l-wx------ 1 oracle dba 64 Dec 19 21:50 6 -> /app/oracle/admin/orcl/bdump/alert_orcl.log
lrwx------ 1 oracle dba 64 Dec 19 21:50 7 -> /app/oracle/product/10.2.0/db_1/dbs/lkinstorcl (deleted)
l-wx------ 1 oracle dba 64 Dec 19 21:50 8 -> /app/oracle/admin/orcl/bdump/alert_orcl.log
lrwx------ 1 oracle dba 64 Dec 19 21:50 9 -> /app/oracle/product/10.2.0/db_1/dbs/hc_orcl.dat

注意其中"/app/oracle/oradata/ORCL/datafile/o1_mf_users_555wrj4o_.dbf (deleted)"字樣,表示該文件已經(jīng)被刪除,如果是Solaris操作系統(tǒng),ls命令不會有如此清晰的顯示,為了在Solaris系統(tǒng)中確認哪個句柄對應哪個文件,則需要使用lsof程序。

5. 直接cp該句柄文件名回原位置。

復制代碼
代碼如下:

cp 19 /app/oracle/oradata/ORCL/datafile/o1_mf_users_555wrj4o_.dbf

6. 進行數(shù)據(jù)文件recover

復制代碼
代碼如下:

SQL> alter database datafile 4 offline;
Database altered.
SQL> recover datafile 4;
Media recovery complete.
SQL> alter database datafile 4 online;
Database altered.

完成數(shù)據(jù)文件恢復。

恢復的原理是,在Linux操作系統(tǒng)中,如果文件從操作系統(tǒng)級別被rm掉,之前打開該文件的進程仍然持有相應的文件句柄,所指向的文件仍然可以讀寫,并且該文件的文件描述符可以從/proc目錄中獲得。但是要注意的是,此時如果關(guān)閉數(shù)據(jù)庫,則此句柄會消失,那么除了掃描磁盤進行文件恢復之外就沒有其它方法了,因此在數(shù)據(jù)庫出現(xiàn)問題的時候,如果不確認情況的復雜程度,千萬不要隨便關(guān)閉數(shù)據(jù)庫。重啟數(shù)據(jù)庫往往是沒有意義的,甚至是致命的。

當然,客戶的操作系統(tǒng)是Solaris,并且客戶刪除的文件還包括current online redo log,因此還有其它更復雜的操作,不在這里描述。

標簽:南陽 黔南 莆田 開封 武漢 南京 陽泉 綿陽

巨人網(wǎng)絡通訊聲明:本文標題《Linux(Unix)中誤刪除的文件恢復方法》,本文關(guān)鍵詞  Linux,Unix,中誤,刪除,的,文件,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Linux(Unix)中誤刪除的文件恢復方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于Linux(Unix)中誤刪除的文件恢復方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章