oracle 11g ora-00979 bug的处理

在将Oracle10g报表库迁移到Oracle11g过程中,遇到存储过程编译报ORA-00979错误。原因在于11g的一个bug,当使用了groupby和orderby且它们使用相同属性同时设置了cursor_sharing不为EXACT时,会出现此错误。文章提供了修改建议和工作规避方法。

 将oracle 10g报表库迁移到 oracle 11g上发现有个存储过程编译时报ora-00979错误,经确定是group by 后面加的游标不能使用,后来用metlink查询发现是11g的一个bug:


ORA-979 bugs on 11.2.0.1 [ID 1085766.1]
          修改时间 23-MAR-2012     类型 FAQ     状态 PUBLISHED         

Applies to:
Oracle Server - Enterprise Edition - Version: 11.2.0.1.0 to 11.2.0.1.0 - Release: 11.2 to 11.2
Information in this document applies to any platform.
Purpose
The purpose of this document is to have a complete list of ORA-979 bugs with workarounds and their current status on 11.2
Questions and Answers
1. BUG 9411496 - ORA-979 ON 'UNION ALL PUSHED PREDICATE' (Query Optimizer bug)
--- Symptoms ---
When the query has group by and order by, and they use the same attribute and the cursor_sharing is set to a value <> EXACT, the queries fail with ORA-979.

The call stack from the event 979 errorstack is:

... qcuErroer qcuErroep erroep qecgoc qecoby qecpqbcheck qecdrv kkqcttcalo kkqctdrvJPPD kkqjpdctr qksqbApplyToQbc kkqctdrvTD kkqjpddrv kkqdrv kkqctdrvIT apadrv opitca kksFullTypeCheck rpiswu2 kksSetBindType kksfbc ...
--- Changes ---
Following the upgrade to 11.2.
--- Cause ---
Bug 9411496 - ORA-979 ON 'UNION ALL PUSHED PREDICATE'
--- Solution ---
The workarounds are:

1. "_fix_control"="5520732:OFF"

OR

2. optimizer_features_enable = '11.1.0.7'

OR

3."_optimizer_push_pred_cost_based" = false

OR

4."_optimizer_cost_based_transformation" = off

The bug is fixed and there are patches for some platforms.  If the workarounds are not acceptable, a one-off patch for the bug should be requested from Oracle Support.


2. Bug 9478304 "LOOP FAILING WITH ORA-00979 NOT A GROUP BY EXPRESSION" (Query Optimizer bug)
--- Symptoms ---

GROUP BY/ORDER BY in PL/SQL cursor loops fails with ORA-979.

 

1,3,4都是隐含参数,修改必须重启数据库,只有2可以在线修改,修改后编译通过,问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值