首页 > 代码库 > 简单记录一次REDO文件损坏报错 ORA-00333重做日志读取块出错
简单记录一次REDO文件损坏报错 ORA-00333重做日志读取块出错
一.故障描写叙述
首先是实例恢复须要用到的REDO文件损坏
二、解决方法
1.对于非当前REDO或者当前REDO可是无活动事务使用下面CLEAR命令:
用CLEAR命令重建该日志文件SQL>alter database clear logfile group 3。
假设是该日志组还没有归档,则须要用SQL>alter database clear unarchived logfile group 3;
由于是当前实例恢复须要用的REDO,且未归档。使用是CLEAR命令不行的。
2.没备份,有备份能够參考下面:
拷贝有效的数据库的全备份,并不全然恢复数据库
能够採用获取近期的SCN的办法用until scn恢复或用until cnacel恢复
recover database until cancel
先选择auto。尽量恢复能够利用的归档日志。然后又一次
recover database until cancel
这次输入cancel,完毕不全然恢复,也就是说恢复两次。如:
SQL> recover database until cancel;
Auto
……
SQL> recover database until cancel;
Cancel;
、利用alter database open resetlogs打开数据库
说明:
这样的办法恢复的数据库是一致的不全然恢复。会丢失当前联机日志中的事务数据
这样的方法适合于归档数据库而且有可用的数据库全备份。
恢复成功之后,记得再做一次数据库的全备份。
建议联机日志文件一定要实现镜相在不同的磁盘上,避免这样的情况的发生,由于不论什么数据的丢失对于生产来说都是不容许的。
3.改动隐含參数_allow_resetlogs_corruption
_allow_resetlogs_corruption=TRUE
又一次启动数据库,利用until cancel恢复
SQL>recover database until cancel;
Cancel
假设出错,不再理会,发出
SQL>alter database open resetlogs;
数据库被打开后,立即运行一个full export
shutdown数据库,去掉_all_resetlogs_corrupt參数
二、參考EYGLE:ORA-00600 kcratr1_lostwrt之解决与原理分析
ksedmp: internal or fatal error这个错误不难解决,可是其详细成因有点意思。
ORA-00600: internal error code, arguments: [kcratr1_lostwrt], [], [], [], [], [], [], []
Current SQL statement for this session:
alter database open
Metalink对这个错误的解释仅仅有一句关键:
When an instance is restarted following an instance crash, Oracle carries out some checks against the last block that was written to disk prior to the instance crash.这句话是说,当实例崩溃之后启动,Oracle会去检查崩溃前最后一个写出的数据块,通过控制文件校验其是否一致,假设这个块是Old的,则说明最后的写操作丢失了。
If Oracle finds an old block, then this suggests a lost write and the error is raised.
这是一个很快捷巧妙地推断。假设有写丢失,自然必须引入恢复。
在跟踪文件里记录了具体的信息:
Last BWR afn: 6 rdba: 0x18f9590(blk 1021328) ver: 0x0001.5c21fd6e.01 flg: 0x04提示说。控制文件记录的最后一次写的数据块是file6 block 1021328,SCN版本号为:5c21fd6e,而数据文件上记录的SCN则是5c1ec4f0,后者Old,小于前者,这说明丢失了写操作。
Disk version: 0x0001.5c1ec4f0.04 flag: 0x04
那是否能恢复呢?跟踪文件中还会记录这种信息:
Thread checkpoint rba:0x00dfeb.00000002.0010 scn:0x0001.5c1ee5b7线程检查点的SCN为5c1ee5b7。而On-Disk Rba的SCN为5c2266d6,全然能够推演超过5c21fd6e,能够恢复。
On-disk rba:0x00dfeb.0001161f.0000 scn:0x0001.5c2266d6
所以这种问题:
SQL>startup mount;一般就能够完毕恢复了。假设不幸的,你的On-Disk Rba不足以恢复丢失的写操作。则问题将严重了。
SQL>recover database;
SQL>alter database open;
參考:http://blog.itpub.net/25964700/viewspace-709097/ http://www.eygle.com/archives/2010/05/ora-00600_kcratr1_lostwrt.html
简单记录一次REDO文件损坏报错 ORA-00333重做日志读取块出错