首页 > Linux操作系统 > Linux操作系统 > 数据库恢复的最后手段
Oracle按照数据库恢复的程度来说可以分为两种方式:完全恢复和不完全恢复。完全恢复指的是能够将数据库恢复到当前SCN,不完全恢复指的是只能够将数据库恢复到曾经SCN,即数据库基于时间点恢复(DBPITR),然后以resetlogs方式打开数据库。但是,某些情况使得不完全恢复也无法执行,例如:介质设备也出现了问题,损坏了备份集,那么该如何处理呢,下文将给出指导方针。
方法1:强行打开数据库,抢救可访问的数据。
使用隐含参数_allow_resetlogs_corruption的作用是在数据文件头和控制文件记录最新的SCN不匹配的时候也能够打开数据库,当下一次checkpoint的时候,数据文件的SCN会被覆盖掉,当然这种做法会使得数据库处于不一致状态。这种方法也不是100%能够保证打开数据库的,所以,不到万不得已的时候,还是要慎重使用。
--修改init.ora,设置隐含参数_ALLOW_RESETLOGS_CORRUPTION为true
_ALLOW_RESETLOGS_CORRUPTION=TRUE
--强行打开数据库
sql> startup mount pfile='G:\ORA_DATA\oratest\init.ora';
sql> recover database until cancel;
cancel;
sql> alter database open resetlogs;
--一旦数据库打开,立即做一个全库导出或者用户导出操作。
--如果数据块损坏,还需要设置event 10231.
Sql> ALTER SYSTEM SET EVENTS '10231 TRACE NAME CONTEXT FOREVER, LEVEL 10';
exp system/system full=y file=db.dmp
exp system/system wner=xxxx file=db.dmp
--重建数据库
--导入数据
--备份数据库
方法2:使用工具直接读取数据文件。
如果方法1也不能够恢复数据,那么只能够直接从数据文件中读取数据了,可以使用DUL(Oracle's Data Unloader)工具,但是这是需要求助于Oracle售后,并且收费的。国内也有很多大侠编写了从数据文件中抢救数据的工具,例如:dcba的AUL、fuyuncat的FySafe。
http://www.hellodba.com/Download/FySafe_zh.htm
总之,做好备份策略,别让自己去做万不得已的事。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7700957/viewspace-616262/ ,如需转载,请注明出处,否则将追究法律责任。