日期:2014-05-16  浏览次数:20753 次

使用linux文件句柄恢复误删除的Oracle数据文件
测试环境:OEL+Oracle  11.2.0.1
 
首先查看当前的数据文件及数据文件状态:
SQL> select file_id,tablespace_name,file_name,status from dba_data_files;
 
   FILE_ID TABLESPACE FILE_NAME                              STATUS
---------- ---------- -------------------------------------- ---------
         4 USERS      /oradata/orcl2/users01.dbf             AVAILABLE
         3 UNDOTBS1   /oradata/orcl2/undotbs01.dbf           AVAILABLE
         2 SYSAUX     /oradata/orcl2/sysaux01.dbf            AVAILABLE
         1 SYSTEM     /oradata/orcl2/system01.dbf            AVAILABLE
         6 BOOK       /oradata/orcl2/book.dbf                AVAILABLE
         5 SG         /oradata/orcl2/SG01.dbf                AVAILABLE
 
SQL> select file#,status,name from v$datafile;
 
     FILE# STATUS  NAME
---------- ------- ----------------------------------------
         1 SYSTEM  /oradata/orcl2/system01.dbf
         2 ONLINE  /oradata/orcl2/sysaux01.dbf
         3 ONLINE  /oradata/orcl2/undotbs01.dbf
         4 ONLINE  /oradata/orcl2/users01.dbf
         5 ONLINE  /oradata/orcl2/SG01.dbf
         6 ONLINE  /oradata/orcl2/book.dbf
 
准备对数据文件/oradata/orcl2/SG01.dbf进行rm删除并使用Linux句柄进行恢复,删除后切记不可将实例shutdown(其实shutdown后也没关系,只是会使恢复更麻烦);
删除数据文件/oradata/orcl2/SG01.dbf
[oracle@DBA2 orcl2]$ rm SG01.dbf
[oracle@DBA2 orcl2]$
查看文件句柄,发现/oradata/orcl2/SG01.dbf状态为(delete)如红显处:
[oracle@DBA2 orcl2]$ ps -ef|grep dbw|grep -v grep|awk '{print $2}'
3140
PS:3140 为DBWn进程的pid,DBWn进程引用此句柄对数据文件操作,其实也可以用LGWR等其他Oracle进程,不一定非得用DBWn这个进程的pid;
[oracle@DBA2 orcl2]$ cd /proc/3140/fd
[oracle@DBA2 fd]$ ls -al
total 0
dr-x------ 2 oracle oinstall  0 Sep  4 09:28 .
dr-xr-xr-x 7 oracle oinstall  0 Sep  4 09:28 ..
lr-x------ 1 oracle oinstall 64 Sep  4 09:41 0 -> /dev/null
l-wx------ 1 oracle oinstall 64 Sep  4 09:41 1 -> /dev/null
l-wx------ 1 oracle oinstall 64 Sep  4 09:41 10 -> /u/oracle/diag/rdbms/orcl2/orcl2/trace/orcl2_ora_3056.trc
l-wx------ 1 oracle oinstall 64 Sep  4 09:41 11 -> /u/oracle/diag/rdbms/orcl2/orcl2/trace/orcl2_ora_3056.trm
lr-x------ 1 oracle oinstall 64 Sep  4 09:41 12 -> /u/oracle/product/11.2/rdbms/mesg/oraus.msb