暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

一次bug处理ora-00604 ora-00901

Vagrant Boy Awy 2019-12-09
1153

过程描述:

    某客户有套生产库从18迁移至19,理论上18到19只是个小版本变化,应该没啥问题,迁移完一周后,开发说某条sql跑不出来,并发出了语句。

    拿到语句后就直接去执行了一下,发现确实不行。

报错如下:

    

select *

 from table1 t

 where t.cjrq = '20191130'

 and t.deptid in (select cast(t4.org_id as varchar2(40)) from view_org_lvl t4);

from table2 t;


ERROR at line 2:

ORA-00604: error occurred at recursive SQL level 1

ORA-00910: specified length too long for its datatype

处理过程:

    我对这个语句做了10046跟踪,看下走到哪一步报错了。

拿到10046直接搜索error,错误日志如下:

发现oracle创建可一张临时表,"INTERNAL_CYCLEKEY$" 字段为32767确实超出长度了,看到这有经验的工程师心里已经有答案了,就是oracle的bug应该是创建临时表的时候少处理了一步,接着去mos搜一下,结果很失望没搜到,那么开个sr问问?

开了sr我给了所有相关信息,很快确认为bug。

临时解决方法如下:

1. Hint /*+ NO_STAR_TRANSFORMATION */
2. Set "_with_subquery"=inline

相关bug信息如下:


文章转载自Vagrant Boy Awy,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论