ora10g_ora_2904.trc
lr-x------ 1 oracle oinstall 64 Aug 25 12:51 4 -> /dev/null
lr-x------ 1 oracle oinstall 64 Aug 25 12:51 3 -> /dev/null
lr-x------ 1 oracle oinstall 64 Aug 25 12:51 2 -> /dev/null
lr-x------ 1 oracle oinstall 64 Aug 25 12:51 1 -> /dev/null
lrwx------ 1 oracle oinstall 64 Aug 25 12:51 9 -> /u01/app/oracle/product/10.2.0/db_1/dbs/hc_ora10g.dat
l-wx------ 1 oracle oinstall 64 Aug 25 12:51 8 -> /u01/app/oracle/admin/ora10g/bdump/alert_ora10g.log
lrwx------ 1 oracle oinstall 64 Aug 25 12:51 7 -> /u01/app/oracle/product/10.2.0/db_1/dbs/lkinstora10g (deleted)
lrwx------ 1 oracle oinstall 64 Aug 25 12:51 23 -> /u01/app/oracle/oradata/ora10g/temp01.dbf (deleted)
lrwx------ 1 oracle oinstall 64 Aug 25 12:51 22 -> /u01/app/oracle/oradata/ora10g/example01.dbf (deleted)
lrwx------ 1 oracle oinstall 64 Aug 25 12:51 21 -> /u01/app/oracle/oradata/ora10g/users01.dbf (deleted)
lrwx------ 1 oracle oinstall 64 Aug 25 12:51 20 -> /u01/app/oracle/oradata/ora10g/sysaux01.dbf (deleted)
lrwx------ 1 oracle oinstall 64 Aug 25 12:51 19 -> /u01/app/oracle/oradata/ora10g/undotbs01.dbf (deleted)
lrwx------ 1 oracle oinstall 64 Aug 25 12:51 18 -> /u01/app/oracle/oradata/ora10g/system01.dbf (deleted)
lrwx------ 1 oracle oinstall 64 Aug 25 12:51 17 -> /u01/app/oracle/oradata/ora10g/control03.ctl (deleted)
lrwx------ 1 oracle oinstall 64 Aug 25 12:51 16 -> /u01/app/oracle/oradata/ora10g/control02.ctl (deleted)
lrwx------ 1 oracle oinstall 64 Aug 25 12:51 15 -> /u01/app/oracle/oradata/ora10g/control01.ctl (deleted)
lrwx------ 1 oracle oinstall 64 Aug 25 12:51 14 -> /u01/app/oracle/product/10.2.0/db_1/dbs/lkORA10G
lrwx------ 1 oracle oinstall 64 Aug 25 12:51 13 -> /u01/app/oracle/product/10.2.0/db_1/dbs/hc_ora10g.dat
lr-x------ 1 oracle oinstall 64 Aug 25 12:51 12 -> /dev/zero
lr-x------ 1 oracle oinstall 64 Aug 25 12:51 11 -> /dev/zero
lrwx------ 1 oracle oinstall 64 Aug 25 12:51 10 -> /u01/app/oracle/admin/ora10g/adump/ora_2904.aud
[oracle@ora10g fd]$
分析:可以看句柄7,15-23的文件末尾被标记(deleted),这是由刚才的rm -rf操作所导致的,误删除后只要Oracle数据库未重启,进程就不会停止,那么就可以通过/proc/#oracle进程号/fd目录中的文件句柄号,来对这些被delete的文件进行恢复,方法就是cp文件句柄到原路径,注意一点这里如果不是在fd目录,那就要用绝对路径来指定文件句柄,如果删除文件后就,又对数据库进行了关闭操作,那就无解了
--手动创建ora10g实例名命名的目录并cp句柄到具体路径
[oracle@ora10g fd]$ mkdir /u01/app/oracle/oradata/ora10g/
[oracle@ora10g fd]$ cp 7 /u01/app/oracle/product/10.2.0/db_1/dbs/lkinstora10g
[oracle@ora10g fd]$ cp 23 /u01/app/oracle/oradata/ora10g/temp01.dbf
[oracle@ora10g fd]$ cp 22 /u01/app/oracle/oradata/ora10g/example01.dbf
[oracle@ora10g fd]$ cp 21 /u01/app/oracle/oradata/ora10g/users01.dbf
[oracle@ora10g fd]$ cp 20 /u01/app/oracle/oradata/ora10g/sysaux01.dbf
[oracle@ora10g fd]$ cp 19 /u01/app/oracle/oradata/ora10g/undotbs01.dbf
[oracle@ora10g fd]$ cp 18 /u01/app/oracle/oradata/ora10g/system01.dbf
[oracle@ora10g fd]$ cp 17 /u01/app/oracle/oradata/ora10g/control03.ctl
[oracle@ora10g fd]$ cp 16 /u01/app/oracle/oradata/ora10g/control02.ctl
[oracle@ora10g fd]$ cp 15 /u01/app/oracle/oradata/ora10g/control01.ctl
注意,这里一定要注意权限问题,要用oracle用户去cp,如果用root去cp出来的文件,oracle进程是没有权限操作的,当然,你也可以在用root恢复完后,再chown一下:
[root@ora10g fd]# chown oracle.oinstall /u01/app/oracle -R
但是一定要注意,必须等全部数据文件恢复后才可以做chown操作,因为一旦执行了该操作,原来的ora_进程会停止!!!你再也无法恢复丢失的数据了!!!这也是为什么推荐用oralce用户来cp的原因
[root@ora10g fd]# ps -ef | grep ora_dbw
oracle 3