误删DATAFILE的快捷恢复

       中午解决温饱问题的时候右眼狂跳,凶兆!  果不其然, 一回到公司开发就告知:数据文件被误操作删除了!! 问其原因,答曰,操作的时候手抖了一下。。。。。靠

       登上去检查,由于删除的是一个非关键性的数据文件,所以没有导致业务中断,数据库也很正常的跑着,这是好事,不过丢失的那个文件还是得恢复。

      ps -ef |grep ora   得到DBW0的PID 38818, 再通过 lsof -a -p 38818 查出当前DBW0 所操作的所有相关文件,包括被删除的! 在LINUX中,当进程打开了某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中。这意味着,进程并不知道文件已经被删除,它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入。除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录条目。

   lsof -a -p 38818

COMMAND     PID   USER   FD      TYPE    DEVICE   SIZE       NODE         NAME

oracle         15910 oracle   48uW  REG       8 ,2      209723392  9061757 /home/oracle/oradata/cul.dbf

在显示的结果中查找目标文件,LINUX中被删除的文件会被标记为(delete), LUCKY !丢失的数据文件还在打开状态,然后在 /proc/15910/fd/   找到FD对应的值 48,   这个连接就是对应丢失的文件,  最后通过 cat  48 > /home/oracle/oradata/cul.dbf  重建datafile,  登陆sqlplus ,  

alter database create  datafile '/home/oracle/oradata/cul.dbf' as '/home/oracle/oradata/cul.dbf'  ;

recover datafile '/home/oracle/oradata/cul.dbf' ;

alter datafile '/home/oracle/oradata/cul.dbf'  online;

OK~搞定。 这次是运气好,文件丢失的时候估计有脏数据没有commit 所以DBW0一直保持在打开此文件的状态,如果不幸的 在lsof中找不到丢失的文件,那么就只有用backup来恢复了。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13351439/viewspace-434737/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13351439/viewspace-434737/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值