问题描述
嗨,汤姆,
这是我们得到的错误:
SQL:
更新/* 并行 */ POM_BACKPOINTER设置为 _class = 1546,其中to_uid在 (从ao_temp中选择puid);
错误:
ORA-00600: 内部错误代码,参数: [kdu_array_buf: 深度],[17],[16],[]
(对于其中一个平行奴隶)
qerpxSlaveFetch
rwsrid:1 pxid:1 err:600
----- 解释计划转储 -----
----- 紧凑格式 (流) -----
我们转储了生产数据库,并将其导入到dryrun系统中。相同的转储在测试或开发系统中没有显示问题。所以我们假设这是一个问题,如果这个数据库实例。
我们试图减少dop,我们增加了搜索区域,重新创建统计信息和索引,更改了执行计划...没有变化。
同样,手动执行相同的sql也没有显示相同的问题。
我当时以为它可能会重新分配给撤消表空间,但我不知道如何证明它或现在该怎么做。我们应该尝试重新创建撤消表空间吗?根本原因还有其他想法吗?
我认为可能很有趣的痕迹的一些片段:
问题键: ORA 600 [kdu_array_buf: 深度]
错误: ORA-600 [kdu_array_buf: 深度] [17] [16] []
[00]: [诊断 _ dde]
[01]: dbgeEndDDEInvocationImpl [diag_dde]
[02]: dbgeEndDDEInvocation [diag_dde]
[03]: kdu_array_buf [数据]<-- 信令
[04]: kduovw [数据]
[05]: kduurp [数据]
[06]: kdusru [数据]
[07]: kdu_retry_update [数据]
[08]: kdu_array_flush _ 重试 [数据]
[09]: kdu_retry_update [数据]
[10]: kdu_array_flush _ 重试 [数据]
[11]: kdu_retry_update [数据]
[12]: kdu_array_flush _ 重试 [数据]
[13]: kdu_retry_update [数据]
[14]: kdu_array_flush _ 重试 [数据]
[15]: kdu_retry_update [数据]
[16]: kdu_array_flush _ 重试 [数据]
[17]: kdu_retry_update [数据]
[18]: kdu_array_flush _ 重试 [数据]
[19]: kdu_retry_update [数据]
[20]: kdu_array_flush _ 重试 [数据]
[21]: kdu_retry_update [数据]
[22]: kdu_array_flush _ 重试 [数据]
[23]: kdu_retry_update [数据]
[24]: kdu_array_flush _ 重试 [数据]
[25]: kdu_retry_update [数据]
[26]: kdu_array_flush _ 重试 [数据]
[27]: kdu_retry_update [数据]
[28]: kdu_array_flush _ 重试 [数据]
[29]: kdu_retry_update [数据]
[30]: kdu_array_flush _ 重试 [数据]
[31]: kdu_retry_update [数据]
[32]: kdu_array_flush _ 重试 [数据]
[33]: kdu_retry_update [数据]
[34]: kdu_array_flush _ 重试 [数据]
[35]: kdu_retry_update [数据]
[36]: kdu_array_flush _ 重试 [数据]
[37]: kdu_retry_update [数据]
[38]: kdu_array_flush _ 重试 [数据]
[39]: kdu_retry_update [数据]
[40]: kdu_array_flush _ 重试 [数据]
[41]: kdu_array_flush1 [数据]
[42]: kdusru [数据]
[43]: 考乌普 [数据]
[44]: updrow [DML]
[45]: qruupfetch [SQL_Execution]
[46]: qertqoFetch [并行执行]
[47]: qerpxSlaveFetch [并行执行]
[48]: qerpxFetch [并行执行]
[49]: updexe [DML]
--
kdu_array_buf: 递归深度失败
*
ORA-30036诊断
此诊断信息转储到跟踪文件,位于
大多数每24小时一次,它不表示任何错误。
*
Reason: kdu_array_buf: 递归深度失败
当前撤消表空间UNDOTBS1 (tsn = 2)
撤消表空间当前大小9830400 blks,maxsize 12582906 blks,可扩展
撤消保留 (反应):2723,最大查询长度: 2684
参数撤消保留: 900,调谐撤消保留: 2723,高阈值撤消保留: 4294967294自动调谐: 1
保留担保假
当前时间为1518190661
这是我们得到的错误:
SQL:
更新/* 并行 */ POM_BACKPOINTER设置为 _class = 1546,其中to_uid在 (从ao_temp中选择puid);
错误:
ORA-00600: 内部错误代码,参数: [kdu_array_buf: 深度],[17],[16],[]
(对于其中一个平行奴隶)
qerpxSlaveFetch
rwsrid:1 pxid:1 err:600
----- 解释计划转储 -----
----- 紧凑格式 (流) -----
我们转储了生产数据库,并将其导入到dryrun系统中。相同的转储在测试或开发系统中没有显示问题。所以我们假设这是一个问题,如果这个数据库实例。
我们试图减少dop,我们增加了搜索区域,重新创建统计信息和索引,更改了执行计划...没有变化。
同样,手动执行相同的sql也没有显示相同的问题。
我当时以为它可能会重新分配给撤消表空间,但我不知道如何证明它或现在该怎么做。我们应该尝试重新创建撤消表空间吗?根本原因还有其他想法吗?
我认为可能很有趣的痕迹的一些片段:
问题键: ORA 600 [kdu_array_buf: 深度]
错误: ORA-600 [kdu_array_buf: 深度] [17] [16] []
[00]: [诊断 _ dde]
[01]: dbgeEndDDEInvocationImpl [diag_dde]
[02]: dbgeEndDDEInvocation [diag_dde]
[03]: kdu_array_buf [数据]<-- 信令
[04]: kduovw [数据]
[05]: kduurp [数据]
[06]: kdusru [数据]
[07]: kdu_retry_update [数据]
[08]: kdu_array_flush _ 重试 [数据]
[09]: kdu_retry_update [数据]
[10]: kdu_array_flush _ 重试 [数据]
[11]: kdu_retry_update [数据]
[12]: kdu_array_flush _ 重试 [数据]
[13]: kdu_retry_update [数据]
[14]: kdu_array_flush _ 重试 [数据]
[15]: kdu_retry_update [数据]
[16]: kdu_array_flush _ 重试 [数据]
[17]: kdu_retry_update [数据]
[18]: kdu_array_flush _ 重试 [数据]
[19]: kdu_retry_update [数据]
[20]: kdu_array_flush _ 重试 [数据]
[21]: kdu_retry_update [数据]
[22]: kdu_array_flush _ 重试 [数据]
[23]: kdu_retry_update [数据]
[24]: kdu_array_flush _ 重试 [数据]
[25]: kdu_retry_update [数据]
[26]: kdu_array_flush _ 重试 [数据]
[27]: kdu_retry_update [数据]
[28]: kdu_array_flush _ 重试 [数据]
[29]: kdu_retry_update [数据]
[30]: kdu_array_flush _ 重试 [数据]
[31]: kdu_retry_update [数据]
[32]: kdu_array_flush _ 重试 [数据]
[33]: kdu_retry_update [数据]
[34]: kdu_array_flush _ 重试 [数据]
[35]: kdu_retry_update [数据]
[36]: kdu_array_flush _ 重试 [数据]
[37]: kdu_retry_update [数据]
[38]: kdu_array_flush _ 重试 [数据]
[39]: kdu_retry_update [数据]
[40]: kdu_array_flush _ 重试 [数据]
[41]: kdu_array_flush1 [数据]
[42]: kdusru [数据]
[43]: 考乌普 [数据]
[44]: updrow [DML]
[45]: qruupfetch [SQL_Execution]
[46]: qertqoFetch [并行执行]
[47]: qerpxSlaveFetch [并行执行]
[48]: qerpxFetch [并行执行]
[49]: updexe [DML]
--
kdu_array_buf: 递归深度失败
*
ORA-30036诊断
此诊断信息转储到跟踪文件,位于
大多数每24小时一次,它不表示任何错误。
*
Reason: kdu_array_buf: 递归深度失败
当前撤消表空间UNDOTBS1 (tsn = 2)
撤消表空间当前大小9830400 blks,maxsize 12582906 blks,可扩展
撤消保留 (反应):2723,最大查询长度: 2684
参数撤消保留: 900,调谐撤消保留: 2723,高阈值撤消保留: 4294967294自动调谐: 1
保留担保假
当前时间为1518190661
专家解答
从Doc ID 1414343.1
但与往常一样-使用ORA-600和/或隐藏的参数,请与支持人员联系以获取指导。
SYMPTOMS
The following error is reported by alert log
ORA-00600: internal error code, arguments: [kdu_array_buf:depth], [17], [16], [], [], [], [], [], [], [], [], []
The trace file confirms:
Call Stack Trace
----------------
kdu_array_buf kduurp kdusru kdu_retry_update kdu_array_flush ...
----- Incident Context Dump -----
...
[01]: kdu_array_buf []<-- Signaling
[02]: kduurp []
[03]: kdusru []
[04]: kdu_retry_update []
[05]: kdu_array_flush []
[06]: kdu_retry_update []
[07]: kdu_array_flush []
[08]: kdu_retry_update []
[09]: kdu_array_flush []
[10]: kdu_retry_update []
...
CHANGES
The ORA-600 occurs when SMON performs maintenance on Undo Tablespace (such as shrinking an Undo Segment). This might not be obvious when reading the trace file as this might show a DML statement such as illustrated by the following trace information:
----- Current SQL Statement for this session (sql_id=1vwg99k24trd0) -----
update "OPI"."MLOG$_OPI_DBI_JOB_MTL_DTL_" set snaptime$$ = :1 where rowid in
(select rowid from "OPI"."MLOG$_OPI_DBI_JOB_MTL_DTL_" AS OF SNAPSHOT (:2)
log$ where snaptime$$ >
to_date('2100-01-01:00:00:00','YYYY-MM-DD:HH24:MI:SS'))
----- PL/SQL Stack -----
----- PL/SQL Call Stack -----
object line object
handle number name
47e5d9948 84 package body SYS.DBMS_SNAPSHOT
47e5d9948 1808 package body SYS.DBMS_SNAPSHOT
47e5d9948 2506 package body SYS.DBMS_SNAPSHOT
47e5d9948 2751 package body SYS.DBMS_SNAPSHOT
47e5d9948 2720 package body SYS.DBMS_SNAPSHOT
...
CAUSE
This issue is addressed by Bug:10410505 which is a confirmed duplicate of unpublished Bug 8476681 which was still not fixed at the time of publishing this article.
WORKAROUND
This fix requires architectural changes which is not possible for 10g/11g. Therefore the following workaround could be used:
Set parameter "_kdu_array_depth" to a value larger then the default value (16).
The parameter is dynamic and can be adjusted without a database restart.
Example: Set "_kdu_array_depth" to 24
alter system set "_kdu_array_depth"=24 scope=memory;
To implement this into spfile, execute:
alter system set "_kdu_array_depth"=24 scope=spfile;
但与往常一样-使用ORA-600和/或隐藏的参数,请与支持人员联系以获取指导。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




