Oracle資料恢復 - Linux / Unix 誤刪除的檔案恢復(轉)
今天有客戶的資料庫意外被刪除了整個目錄中的資料檔案,作業系統級別的刪除,然而幸運的是這個資料庫沒有崩潰,仍然處於open狀態的時候,客戶就發現了問題,求助到我們,最終完整地恢復了所有資料檔案。
在Linux下大致重新演示一下恢復的過程,恢復的步驟與資料庫版本沒有太大關係,與作業系統的不同會有所不同。
1. 在資料庫open的時候,直接刪除users表空間中的資料檔案。
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表空間中建立表,開始報錯。
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會開啟所有資料檔案的控制程式碼。在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)"字樣,表示該檔案已經被刪除,如果是Solaris作業系統,ls命令不會有如此清晰的顯示,為了在Solaris系統中確認哪個句 柄對應哪個檔案,則需要使用lsof程式。
5. 直接cp該控制程式碼檔名回原位置。
cp 19 /app/oracle/oradata/ORCL/datafile/o1_mf_users_555wrj4o_.dbf
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,因此還有其它更復雜的操作,不在這裡描述。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23757700/viewspace-719995/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux下恢復誤刪除oracle的資料檔案LinuxOracle
- Oracle 檔案意外刪除恢復(Linux)OracleLinux
- 【北亞資料恢復】誤刪除oracle表和誤刪除oracle表資料的資料恢復方法資料恢復Oracle
- 【資料庫資料恢復】LINUX環境下ORACLE資料庫誤刪除的資料恢復資料庫資料恢復LinuxOracle
- Oracle恢復誤刪資料Oracle
- 【伺服器資料恢復】LINUX誤刪除、格式化的資料恢復伺服器資料恢復Linux
- 【oracle資料庫資料恢復】誤操作導致的資料庫誤刪除的資料恢復案例Oracle資料庫資料恢復
- 【北亞資料恢復】zfs檔案系統的伺服器誤刪除的資料恢復資料恢復伺服器
- 恢復Oracle資料庫誤刪除資料的語句Oracle資料庫
- Sybase ASE資料庫恢復,Sybase資料恢復,資料誤刪除恢復工具READSYBDEVICE資料庫資料恢復dev
- 【伺服器資料恢復】LINUX誤刪除、誤格式化怎麼恢復資料?伺服器資料恢復Linux
- 【伺服器資料恢復】Zfs檔案系統下誤刪除怎麼恢復資料伺服器資料恢復
- linux系統下檔案誤刪除該如何恢復?Linux
- 【NetApp資料恢復案例】針對NetApp誤刪除資料的恢復APP資料恢復
- 伺服器資料恢復-LINUX誤刪除/格式化資料的資料恢復方案伺服器資料恢復Linux
- eclipse 恢復誤刪檔案Eclipse
- Git恢復刪除的檔案Git
- 電腦裡刪除的檔案怎麼恢復,資料恢復方法大全資料恢復
- 【伺服器資料恢復】linux ext3檔案系統下誤刪除mysql資料庫的資料恢復案例伺服器資料恢復LinuxMySql資料庫
- Sybase SQL Anywhere(ASA)資料庫恢復,ASA資料恢復,資料誤刪除恢復工具ReadASADBSQL資料庫資料恢復
- 【儲存資料恢復案例】Netapp誤操作刪除lun的資料恢復資料恢復APP
- 【儲存資料恢復】NetApp儲存誤刪除的資料恢復案例資料恢復APP
- Linux下面誤刪除檔案使用extundelete工具恢復介紹Linuxdelete
- 【資料庫資料恢復】HP-UX系統ORACLE資料庫被誤刪除的資料恢復資料庫資料恢復UXOracle
- hbase 恢復 誤刪除
- 【虛擬機器資料恢復】誤刪除VMware虛擬機器vmdk檔案的資料恢復案例虛擬機資料恢復
- SQL Server資料庫恢復,SQL Server資料恢復,SQL Server資料誤刪除恢復工具SQLRescueSQLServer資料庫資料恢復
- 行動硬碟刪除的檔案能恢復嗎,怎麼恢復硬碟刪除的檔案硬碟
- 【伺服器資料恢復】NetApp儲存誤刪除的資料恢復案例伺服器資料恢復APP
- 電腦檔案誤刪除了怎麼恢復找回?誤刪電腦資料恢復方法教程資料恢復
- Linux 恢復rm -rf命令所刪除的達夢資料檔案Linux
- 【儲存資料恢復】HP EVA儲存誤刪除VDISK的資料恢復案例資料恢復
- 【伺服器資料恢復】EMC Unity儲存誤刪除的資料恢復案例伺服器資料恢復Unity
- 【伺服器資料恢復】EMC Isilon儲存誤刪除的資料恢復案例伺服器資料恢復
- 【伺服器資料恢復】伺服器誤刪除lun如何恢復資料?伺服器資料恢復
- sd卡中的資料夾刪除了怎麼恢復,SD卡刪除的檔案如何恢復SD卡
- mysql誤刪資料恢復MySql資料恢復
- 【伺服器資料恢復】Linux系統下誤刪除虛擬機器的資料恢復案例伺服器資料恢復Linux虛擬機
- Linux下用rm刪除的檔案的恢復方法Linux