一、通過檔案檔案描述符(file descriptor)進行恢複(rm删除資料檔案沒備份)
場景: 誤操作删除資料檔案tp10.dbf
rm -rf /u01/app/oracle/oradata/bxdb/tp10.dbf
select ts#,file#,name,bytes,status from v$datafile;
ps -ef |grep dbw |grep -v grep
cd /proc/12308/fd
1、方法一 :線上恢複
cp /proc/13979/fd/264 /u01/app/oracle/oradata/ocp/newtp12.dbf
alter database datafile 7 offline;
alter database rename file '/u01/app/oracle/oradata/oca/tp12.dbf' to '/u01/app/oracle/oradata/ocp/newtp12.dbf';
recover datafile 7;
alter database datafile online;
2、方法二:離線恢複
cp /proc/13979/fd/264 /u01/app/oracle/oradata/ocp/newtp12.dbf
shutdown immediate;
shutdown abort;
startup
recover database;
alter database open;
二、獲得檔案号
1、方法一:bbed獲得檔案号
set filename '/proc/13979/fd/264'
set blocksize 8192
set filename '/proc/13979/fd/264'
p kcvfh --在bbed中看位置
p kcvfh.kcvfhrfn --顯示相對檔案号資訊(print)
exit
2、方法二:通過od指令得檔案号資訊
9i檔案号的偏移量是280,再加上資料檔案頭上一個作業系統塊8192,od跳過8472即可獲得檔案号
od -j 8472 -t x1 262|head -1 --十六進制輸出
od -j 8472 -t d2 262|head -1 --十進制輸出
10g/11g檔案号的偏移量是368,再加上資料檔案頭上一個作業系統塊8192,od跳過8560即可獲得檔案号
od -j 8560 -t x1 264|head -1 --十六進制輸出
od -j 8560 -t d2 264|head -1 --十進制輸出