天天看點

資料庫檔案被誤删的恢複

一、通過檔案檔案描述符(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  --十進制輸出