1. 程式人生 > >oracle誤刪除數據文件在線恢復方法

oracle誤刪除數據文件在線恢復方法

便是 ora rwx 重啟 信息 緩沖 grep offline bdump

oracle誤刪除數據文件在線恢復方法
如果因為操作系統rm命令或者數據庫語句誤刪除Oracle數據庫的數據文件,**並且數據庫未重啟的話**,可以使用利用**文件描述符的方式**來進行恢復。

① 首先找到一個後臺進程(如 DBWR 進程):在操作系統的root 用戶執行:

root@db1 # ps -ef | grep dbw
root 14348 9859 0 10:15:50 pts/3 0:00 grep dbw
oracle 762 1 0 Jun 10 ? 202:01 ora_dbw0_nms

上面進程號為14348 的便是DBW進程(DBW是將數據緩沖區中所有修改過的緩沖塊數據寫到數據文件的進程)

通過其進程地址找到文件句柄(/proc/<proc_id>/fd)

root@db1 #cd /proc/14384/fd
root@db1 #ll
lr-x------ 1 oracle dba 64 Dec 19 21:50 12 ->
/oracle/10.2.0/db_1/rdbms/mesg/oraus.msb
lrwx------ 1 oracle dba 64 Dec 19 21:50 13 -> /oracle/10.2.0/db_1/dbs/hc_orcl.dat
lrwx------ 1 oracle dba 64 Dec 19 21:50 14 -> /oracle/10.2.0/db_1/dbs/lkORCL

lrwx------ 1 oracle dba 64 Dec 19 21:50 15 ->
/oradata/controlfile/o1_mf555wq3ng.ctl
lrwx------ 1 oracle dba 64 Dec 19 21:50 16 ->
/oradata/datafile/o1_mf_system555wqbnk.dbf
lrwx------ 1 oracle dba 64 Dec 19 21:50 17 -> /oradata/datafile/o1_mf_undotbs1.dbf
lrwx------ 1 oracle dba 64 Dec 19 21:50 18 -> /oradata/datafile/sysaux_555wr.dbf
lrwx------ 1 oracle dba 64 Dec 19 21:50 19 -> /oradata/datafile/users.dbf
lr-x------ 1 oracle dba 64 Dec 19 21:50 2 -> /dev/null
lrwx------ 1 oracle dba 64 Dec 19 21:50 20 ->
/oradata/datafile/o1_mf_temp555wrbnz.tmp
lr-x------ 1 oracle dba 64 Dec 19 21:50 21 ->
/oracle/10.2.0/db_1/rdbms/mesg/oraus.msb
l-wx------ 1 oracle dba 64 Dec 19 21:50 5 -> /admin/udump/orcl_ora_2871.trc
l-wx------ 1 oracle dba 64 Dec 19 21:50 6 -> /admin/bdump/alert_orcl.log
lrwx------ 1 oracle dba 64 Dec 19 21:50 7 -> /oracle/10.2.0/db_1/dbs/lkinstorcl
l-wx------ 1 oracle dba 64 Dec 19 21:50 8 -> /admin/bdump/alert_orcl.log
lrwx------ 1 oracle dba 64 Dec 19 21:50 9 -> /oracle/10.2.0/db_1/dbs/hc_orcl.dat
以下就是數據庫文件的句柄顯示信息,復制這些文件即可恢復那些被刪除但尚未消失的數據文件。
③:復制文件恢復之後,創建了一個新的目錄(保留原來的目錄結構不動),隨後通過 offline、
rename、 recover、 online 四個步驟恢復這些文件,將其加載到數據庫中。
首先復制文件到新分配的目錄空間。
cp /proc/14348/fd/19 /new_u02/oradata/cinms_user01.dbf

將相應的文件離線。
alter database datafile 8 offline;

通過更名(RENAME)的方式對文件進行重定向。
alter database rename file
‘/u02/oradata/cinms_user01.dbf‘ to ‘ /new_u02/oradata/cinms_user01.dbf‘;

然後執行恢復。
recover datafile 8;

最後將文件 Online 加載。
alter database datafile 8 online;

註釋:找到對應的進程,如何從大量的(/proc/<proc_id>/fd) fd 中找到需要的文件是個關鍵。在 Oracle 數據庫
文件的第一個塊(文件頭塊)上,存有數據文件號信息,只要找到這個文件號,就能和數據庫建立起對應關系;
找出這些文件可以運用用BBED/od /lsof等工具

oracle誤刪除數據文件在線恢復方法