eygle.com   eygle.com
eygle.com eygle
eygle.com  
 

« Oracle PatchSet 10.2.0.5的发布时间表 | Blog首页 | 天津 南开大学 与 西南联大的三绝碑 »

ORA-00600 kcratr1_lostwrt之解决与原理分析

客户的一个数据库因为断电遇到了ORA-600 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.
If Oracle finds an old block, then this suggests a lost write and the  error is raised.
这句话是说,当实例崩溃之后启动,Oracle会去检查崩溃前最后一个写出的数据块,通过控制文件校验其是否一致,如果这个块是Old的,则说明最后的写操作丢失了。

这是一个非常快捷巧妙地判断,如果有写丢失,自然必须引入恢复。

在跟踪文件中记录了详细的信息:
Last BWR afn: 6 rdba: 0x18f9590(blk 1021328) ver: 0x0001.5c21fd6e.01 flg: 0x04
Disk version: 0x0001.5c1ec4f0.04 flag: 0x04
提示说,控制文件记录的最后一次写的数据块是file6 block 1021328,SCN版本为:5c21fd6e,而数据文件上记录的SCN则是5c1ec4f0,后者Old,小于前者,这说明丢失了写操作。

那能否恢复呢?跟踪文件里还会记录这样的信息:
Thread checkpoint rba:0x00dfeb.00000002.0010 scn:0x0001.5c1ee5b7
On-disk rba:0x00dfeb.0001161f.0000 scn:0x0001.5c2266d6
线程检查点的SCN为5c1ee5b7,而On-Disk Rba的SCN为5c2266d6,完全可以推演超过5c21fd6e,可以恢复。

所以这样的问题:
SQL>startup mount;
SQL>recover database;
SQL>alter database open;
一般就可以完成恢复了,如果不幸的,你的On-Disk Rba不足以恢复丢失的写操作,则问题将严重了。




历史上的今天...
    >> 2012-05-10文章:
    >> 2007-05-10文章:
    >> 2005-05-10文章:
           楠溪江之美

无觅

By eygle on 2010-05-10 09:21 | Comments (3) | Backup&Recovery | Internal | 2538 |

3 Comments

盖兄,谢谢您对我的支持,
在这儿非常感谢 anysql 兄弟,
他在我遇到困难的时候,给了我第一时间的在线帮助和指导。

在我迷惑不解的时候,我的最后的想法就是来EYGLE.COM看看,是否有相同的案例,
特别感谢EYGLE。我也遇到了这样的问题,本来想放弃了,想想不甘心,我明天就试着恢复看看,
希望我的运气不错。

a bit interesting issue , a good case , a powerful analysis for ora-600


CopyRight © 2004~2020 云和恩墨,成就未来!, All rights reserved.
数据恢复·紧急救援·性能优化 云和恩墨 24x7 热线电话:400-600-8755 业务咨询:010-59007017-7040 or 7037 业务合作: marketing@enmotech.com