love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

Phone:18180207355 提供专业Oracle/MySQL/PostgreSQL数据恢复、性能优化、迁移升级、紧急救援等服务

ora-600 4000恢复一例

本站文章除注明转载外,均为本站原创: 转载自love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

本文链接地址: ora-600 4000恢复一例

下午一个同事遇到经典的ora-600 4000错误,我远程帮忙处理了一下,关于该错误的处理,
网上已经有不少的例子了,通常情况下,该错误通过反复重启数据库,然后可以进行规避
4000错误,但是如果反复重启N次后,错误依旧的话,那么我们只能使用极端手段了。

网上能找到的例子基本上都是一个思路,通过trace 定位到含未提交视图的block,
然后用bbed(windows可以使用UE代替)修改flag,将20修改为80即可,如下:


从上面错误来看,我们知道问题出在访问obj#上,下面继续看trace。



上面的信息比较关键,关于XID,UBA的解释,我以前也写过相关文章,这里不多说。
通过bdba: 0x0040007a 我们可以通过如下查询,得知为file 1 block 122.

编译BBED后,然后看了这个block的ktbbh,如下:

上面的ktbitxid 即为XID的,ktbituba即为UBA,其他的不多说。
这里主要是要修改 ktbitflg,该结构其实占据了2个offset。
修改的时候需要注意一下的是要看os是32位还是64位,32位的话,其字节序是反的。
我这里就直接执行modify /x 8001 offset 60 然后sum apply即可。

然后再重启数据库 直接open,发现不再出现4000错误了,而是2663,这个好办,
该错误跟2662 类似,直接调整scn即可,如下:

最后再次open,错误号即变成了4194,这个就太熟悉不过了,清理undo就行了。
在dbsnake的博客里面,他以前模拟了一下ora-00600 4000错误,详见如下链接:
http://dbsnake.com/2010/08/ora-600-4000-example.html
在网上能搜到的最早处理这个问题的个人应该logzgh,这哥们目前在淘宝。
链接:http://logzgh.itpub.net/post/3185/191423

One Response to “ora-600 4000恢复一例”

  1. ora-600 4000恢复一例 - Oracle - 开发者第994304个问答 Says:

    […] http://www.killdb.com/?p=225 下午一个同事遇到经典的ora-600 […]

Leave a Reply

You must be logged in to post a comment.