关于物理Dataguard切换导致索引坏块的问题

在11.2.0.2之后,有一个非常重要的dataguard的patch。在使用物理dataguard环境(包括ADG),进行switchover之后,存在导致index block上的invalid SCNs的坏块问题。

国内已经好几个行业的大客户,都遇到了这个问题。

在index block中的失效的ITL commit SCN,会违反scn依赖性检查,从而可能抛出如下报错:

ORA-1555
ORA-600 [2663]
ORA-600 [kdsgrp1]
ORA-600 [ktbdchk1: bad dscn]

注:此bug只是影响index block,不影响data block,所以不会造成数据丢失。可以通过重建索引修复。

但是如果你的索引很大,那么修复可能需要一段时间。

解决方法也历经多个补丁,一开始是Patch 8895202,后来是Patch 13513004,现在是Patch 22241601。

打了Patch 22241601这个补丁之后,不再需要手工设置_ktb_debug_flags=8,因为打完补丁自动设置了_ktb_debug_flags=8。在index block cleanout的时候,oracle会自动修复index block上的invalid SCNs的问题。同时,你可以在alertlog中看到相关修复的提示:

如果你目前的PSU只是打到11.2.0.4.8之后,11.2.0.4.161018之后,那么目前这个补丁只有linux X86和linux X86-64版本;如果你已经打PSU到11.2.0.4.161018了,那么目前基本全平台都有这个补丁。

对于没有补丁的平台,建议通过设置隐含参数_ktb_debug_flags=8来解决。

参考:
ALERT Bug 22241601 ORA-600 [kdsgrp1] / ORA-1555 / ORA-600 [ktbdchk1: bad dscn] / ORA-600 [2663] due to Invalid Commit SCN in INDEX (Doc ID 1608167.1)

相关文章

一条评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据