oracle非归档模式下物理文件删除恢复

今天发生了一次很惊险的事情,之前由于误操作,将磁盘上一个几百G的文件夹删除掉,今天发现,其实是数据库的数据文件,惊出一身汗,仔细查看发现以下的现象
1.数据库还可以正常访问,用户登录正常
2.查询和插入表数据报错
3.新建表成功,但是无法插入数据
4.最重要的,误删除后,数据库没有重启

通过以上现象,可以得出,system表空间正常,只是用户的数据文件丢失,这个时候千万记住,不能重启不能重启不能重启,否则一切over。

su - oracle
ps -ef | grep dbw0 
oracle    8921     1  0 13:06 ?        00:00:14 ora_dbw0_orcl
oracle   10278 10252  0 16:01 pts/0    00:00:00 grep dbw0

可以看到进程为8921的进程。

/proc/8921/fd
ll

在这里可以如下的闪烁信息,此步骤是关键

rwx------ 1 oracle oinstall 64 08-27 13:12 31 -> /opt/oradata/sj/gw.dbf (deleted) 

接下来,我们可以确定gw.dbf已经被我们删除了,接下来可以将数据文件copy回去(好神奇啊)

 cp 31 /opt/oradata/sj/gw.dbf 

实际上我执行到这里一片闪烁,只能一个文件一个文件copy回去,注意copy完毕后的权限。网上很多文章在这里说将数据文件脱机,然后执行恢复,在online,其实在非归档模式下,这样是不能操作的,这个时候你如果执行下表的count(*)看看数据回来没有,我的是直接就回来了,为了以防万一,我重启了数据库,在mouted后按照提示
recover datafile ‘————-‘然后alter database open后就一切正常了。

记住:以后一定要备份啊,再熟悉的系统也有手潮的时候啊。

你可能感兴趣的:(oracle)