« Oracle PatchSet 10.2.0.5的发布时间表 | Blog首页 | 天津 南开大学 与 西南联大的三绝碑 »
ORA-00600 kcratr1_lostwrt之解决与原理分析
作者:eygle | 【转载请注出处】|【云和恩墨 领先的zData数据库一体机 | zCloud PaaS云管平台 | SQM SQL审核平台 | ZDBM 数据库备份一体机】
链接:https://www.eygle.com/archives/2010/05/ora-00600_kcratr1_lostwrt.html
客户的一个数据库因为断电遇到了ORA-600 kcratr1_lostwrt错误,数据库无法启动。链接:https://www.eygle.com/archives/2010/05/ora-00600_kcratr1_lostwrt.html
错误信息类似:
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;
历史上的今天...
>> 2012-05-10文章:
>> 2007-05-10文章:
>> 2005-05-10文章:
By eygle on 2010-05-10 09:21 | Comments (3) | Backup&Recovery | Internal | 2538 |
盖兄,谢谢您对我的支持,
在这儿非常感谢 anysql 兄弟,
他在我遇到困难的时候,给了我第一时间的在线帮助和指导。
在我迷惑不解的时候,我的最后的想法就是来EYGLE.COM看看,是否有相同的案例,
特别感谢EYGLE。我也遇到了这样的问题,本来想放弃了,想想不甘心,我明天就试着恢复看看,
希望我的运气不错。
a bit interesting issue , a good case , a powerful analysis for ora-600