原文地址:/thread-1044449-1-2.html
帖子中提到如下场景:Oracle on Linux的环境,在没有shutdown数据库的情况下误删数据文件system01.dbf。对于有完好rman备份或者Data Guard的情况下,神马都是浮云,但古语有云“屋漏偏逢连夜雨,船迟又遇打头风”,祸不单行的事情海了去,对于nobackup有什么好办法呢?
少说废话,直接上处理过程:
首先是模拟出这个囧境:
数据文件system01.dbf让俺“误”删了,有后悔药可以吃吗?
先找出 db writer 进程,该进程肯定会写数据文件的,也可以通过lsof命令找出打开system01.dbf的所有进程。
进程号是 24867
可以看到 258 对应的文件是在闪烁的,并且有一个 (deleted) 标记符,先将这个文件复制到另外的目录:
貌似没问题了,重启一下数据库看看:
这个问题不大,system01.dbf相当于没有alter database begin backup那样进行了热备,recover 一下就好:
搞定。
PS:添加自己的总结:
如果是生产库,没有办法重启的情况下如何进行数据恢复操作。(实际上就是更新一下数据文件头部的SCN号)
1. 首先需要将需要恢复的数据文件offline,
alter database datafile file#(数据文件号) offline;
2. 执行在线恢复并且online该数据文件。
recover datafile file#
alter database datafile file# online;
3. 进行验证
create table test tablespace 表空间(所在的数据文件)