首页 > Oracle > Linux 平台下 误删 oracle 数据文件的恢复方法
2015
05-19

Linux 平台下 误删 oracle 数据文件的恢复方法

上篇文章演示了linux平台下误删oracle目录的恢复方法,下面看了oracle数据文件被误删的恢复方法。

模拟现状:数据库在正常运行,误操作,直接rm 掉了数据文件。

测试环境:

这个问题也要分2种情况,一种是归档模式,一种是非归档模式,归档模式处理就容易很多了。但现在很多由开发人员管理的库是非归档,并且也缺乏专业的运维技能,误操作的概率也会增加很多。

创建测试数据

归档模式处理

至少从目前看,一切都是正常。  这里正常也是因为我们的操作系统是Linux,当数据文件从操作系统级别被rm掉,但之前打开该文件的进程仍然持有相应的文件句柄,所以指向的文件仍然可以读写,并且该文件的文件描述符可以从/proc目录中获得,也可以利用这个句柄恢复文件。如果在这个时候,重启了数据库或者操作系统,那么句柄就会消失,也就只能通过扫描磁盘进行文件恢复。

恢复

Linux 平台下 误删 oracle 数据文件的恢复方法 - 第1张  | Jerry大数据之路

 

这里的259 就是我们删掉的数据文件。

也正常。 这里有2个注意的问题:数据库是归档模式,数据库或者操作系统没有重启。这2点非常关键。 也正式如此,才让操作比较简单。如果是非归档模式,那就要复杂很多了。在非归档模式下,如果删除了数据文件,并且又触发了CKPT,那么CKPT 会直接把整个实例中断掉,也就是说,如果是比较繁忙的数据库,如果误删除数据文件,实例可能会中断,一旦实例中断,那么用之前讲的通过句柄恢复就没有可能性了。当然也有另一种可能性,就是删除数据文件之后,可以先通过句柄恢复,然后用expdp导出数据,尽可能的挽救部分数据。 这个动作就是与时间赛跑的过程了。

总之生产环境,操作一定要小心,还有要开归档,除非数据允许丢失。

最后编辑:
作者:Jerry
一个积极向上的小青年,热衷于分享--Focus on DB,BI,ETL