遭遇ora-600[20022]

在近期进行十一数据库巡检的时候,某省的同事发现在数据库的alertlog中有关于ora-600的报错:

进一步查看了trace文件,发现是一个sql有关:

为什么一个select的sql会造成600的报错?上metalink后找到了答案(Note:378117.1):

ok,我们进一步检查_b_tree_bitmap_plans这个参数的设置,并且检查该sql的执行计划:

根据metalink的指导,我们在数据库中确实把_b_tree_bitmap_plans 设置为true了,不过,很不幸的是,这个值的默认值就是true,也就是说我们没改过这个值。

而且我们从sql执行计划看,在执行计划的第13、14行左右,显示sql确实进行了BITMAP CONVERSION,走了bitmap索引。

如何解决这个问题呢?metalink上介绍说:

汗,竟然让人改隐含参数。

改隐含参数要重启库,这就比较麻烦了。况且,改隐含参数真的有效吗?我在session级试了一下:

在这边我们确实看到了执行计划发生了改变,但是很惨的是,在执行计划的第11行,tab_a变成了全表扫描,这个是个千万级数据的大表,这个sql原来执行只需2秒,而现在却变成了半小时还没出结果。

因此,对于这个问题,我们只能暂时的先放一下了,不能修改隐含参数;即使修改了隐含参数,sql的执行效果变的很差!!修改代码又需要开发修改核心的应用,也是不太现实。不幸中的万幸是,600的报错只是出现一次。在这里,我们暂时先放过这个问题。只能当作oracle临时出现的bug来处理。

相关文章

发表回复

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

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