Oracle 意外刪除資料檔案的恢復

2021-06-20 15:43:03 字數 2271 閱讀 3766

文章**:   

今天有客戶的資料庫意外被刪除了整個目錄中的資料檔案,作業系統級別的刪除,然而幸運的是這個資料庫沒有崩潰,仍然處於open狀態的時候,客戶就發現了問題,求助到我們,最終完整地恢復了所有資料檔案。

在linux下大致重新演示一下恢復的過程,恢復的步驟與資料庫版本沒有太大關係,與作業系統的不同會有所不同。

1. 在資料庫open的時候,直接刪除users表空間中的資料檔案。

sql> select name from v$datafile;

name

2. 嘗試在users表空間中建立表,開始報錯。

sql> create table t tablespace users asselect * 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:

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

ora-01116: error in opening database file 4

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會開啟所有資料檔案的控制代碼。在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 2-> /dev/null

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

5. 直接cp該控制代碼檔名回原位置。

ps -ef|grep dbw0|grep -v grep

oracle   2879     1  0 21:38 ?        00:00:00 ora_dbw0_orcl

$ cd /proc/2879/fd

6. 進行資料檔案recover

sql> alter database datafile 4 offline;

database altered.

sql> recover datafile 4;

media recovery complete.

sql> alter database datafile 4 online;

database altered.

完成資料檔案恢復。

恢復的原理是,在linux作業系統中,如果檔案從作業系統級別被rm掉,之前開啟該檔案的程序仍然持有相應的檔案控制代碼,所指向的檔案仍然可以讀寫,並且該檔案的檔案描述符可以從/proc目錄中獲得。但是要注意的是,此時如果關閉資料庫,則此控制代碼會消失,那麼除了掃瞄磁碟進行檔案恢復之外就沒有其它方法了,因此在資料庫出現問題的時候,如果不確認情況的複雜程度,千萬不要隨便關閉資料庫。重啟資料庫往往是沒有意義的,甚至是致命的。

當然,客戶的作業系統是solaris,並且客戶刪除的檔案還包括current online redo log,因此還有其它更複雜的操作,不在這裡描述。

oracle刪除資料檔案

在我們詳細介紹之前,我們必須說清楚一點 oracle不提供如刪除表 檢視一樣刪除資料檔案的方法,資料檔案是表空間的一部分,所以不能 移走 表空間。一 使用offline資料檔案的方法 非歸檔模式使用 alter database datafile offline drop 歸檔模式使用 alter ...

oracle刪除資料檔案

在我們詳細介紹之前,我們必須說清楚一點 oracle不提供如刪除表 檢視一樣刪除資料檔案的方法,資料檔案是表空間的一部分,所以不能 移走 表空間。一 使用offline資料檔案的方法 非歸檔模式使用 alter database datafile offline drop 歸檔模式使用 alter ...

意外刪除Oracle資料檔案的解決辦法

當手動刪除資料檔案生,oracle會自動關閉,如果啟動的話,會出問題,提示缺少檔案而不能啟動解決辦法 1.sqlplus nolog 2.sql connect as sysdba 3.sql startup mount oracle instance started.total system gl...