客户的一个数据库因为断电遇到了ORA-600 kcratr1_lostwrt错误,数据库无法启动。
错误信息类似:
Metalink对这个错误的解释只有一句关键:
这是一个非常快捷巧妙地判断,如果有写丢失,自然必须引入恢复。
在跟踪文件中记录了详细的信息:
那能否恢复呢?跟踪文件里还会记录这样的信息:
所以这样的问题:
错误信息类似:
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;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




