一、通过文件文件描述符(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 --十进制输出