eygle.com   eygle.com
eygle.com eygle
eygle.com  
 

« 笔记:从点滴讨论中看 OceanBase 的设计理念和架构 | Blog首页 | GaussDB 100 OLTP: 缩减创建数据库的20G空间需求及GS-00714 »

ORA-00600 KGLDELETEALLPINSONOBJ1 一个横贯10g/11g/12c的BUG
modb.pro

在墨天轮上有朋友遇到了一个少见的 ORA-600 错误,第一个错误参数是:KGLDELETEALLPINSONOBJ1 。

从 KGLDELETEALLPINSONOBJ1 的命名可以很快的猜测到基本情况:

KGL - Kernel Generic Library cache ,这意味着问题位于 Library Cache 层面;

DELETE - 代表是删除信息;

ALLPINSONOBJ - 代表 ALL Pins On OBJ ,代表某个对象上的所有 Library Cache Pin .

所以这个错误意味着,Oracle 在清除某个对象上的全部 Library Cache Pin 时,遇到了内部错误,抛出了异常。这种情况多数是代码层面的BUG引起的。

我们摘录一段错误跟踪文件:

Trace file /u01/app/oracle/diag/taldb1_m001_1107.trc
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Build label: RDBMS_12.2.0.1.0_LINUX.X64_170125
ORACLE_HOME: /u01/app/oracle/product/12.2.0.1/dbhome_1
System name: Linux
Release: 2.6.39-400.281.1.el6uek.x86_64
Version: #1 SMP Fri Jun 17 20:10:16 PDT 2016
Machine: x86_64
Instance name: portaldb1
Redo thread mounted by this instance: 1
Oracle process number: 646
Unix process pid: 1107, image: oracle@bserver (M001)


*** 2019-12-02T03:37:04.327775+08:00
*** SESSION ID:(2589.45217) 2019-12-02T03:37:04.327800+08:00
*** CLIENT ID:() 2019-12-02T03:37:04.327809+08:00
*** SERVICE NAME:(SYS$BACKGROUND) 2019-12-02T03:37:04.327817+08:00
*** MODULE NAME:(MMON_SLAVE) 2019-12-02T03:37:04.327826+08:00
*** ACTION NAME:(Advisor Task Maintenance) 2019-12-02T03:37:04.327834+08:00
*** CLIENT DRIVER:() 2019-12-02T03:37:04.327842+08:00

2019-12-02T03:37:04.327545+08:00
Incident 1525642 created, dump file: /u01/app/oracle/taldb1_m001_1107_i15.trc
ORA-00600: internal error code, arguments: [kglDeleteAllPinsOnObj1], [0x1D4E29D4A8], [0x18D8D5C8C8], [], [], [], [], [], [], [], [], []

从以上跟踪文件可以看到,这个问题的基本要素:

1. MMON 执行内部操作;

2.内部的操作是 Advisor Task Maintenance;

进一步从跟踪文件可以获得详细的信息,系统任务 SQL Access Advisor 的 CLEANUP / DELETE 清理操作触发了 ORA-600 错误,触发语句是一个 DROP 物化视图的操作:

----- Current SQL Statement for this session (sql_id=5qcmq7xb5zrhj) -----
DROP MATERIALIZED VIEW "SYSTEM"."MV$$_341480004"
[TOC00005]
----- PL/SQL Stack -----
----- PL/SQL Call Stack -----
object line object
handle number name
0x1d1d528fd0 1619 package body SYS.PRVT_ACCESS_ADVISOR.CLEANUP_TASK
0x1d1d528fd0 1265 package body SYS.PRVT_ACCESS_ADVISOR.RESET_TASK
0x1d1d528fd0 1356 package body SYS.PRVT_ACCESS_ADVISOR.DELETE_TASK
0x180eab3b78 38 type body SYS.WRI$_ADV_SQLACCESS_ADV.SUB_DELETE
0x1d5e8873e8 2132 package body SYS.PRVT_ADVISOR.COMMON_DELETE_TASK
0x1d5e8873e8 7326 package body SYS.PRVT_ADVISOR.DELETE_EXPIRED_TASKS
0x180e53c568 1 anonymous block

结合这些因素,接下来需要借助官方支持站点 MOS 查找已知的 BUG 。

第一个相关的BUG来自 Oracle 10g ,影响版本是 10.2.0.4 :

Bug 8262446 Problems with DBMS_ADVISOR.DELETE_TASK

这是最直接相关的问题,同样的问题在 11g 中还有出现,现在看起来在 12c 中同样没有彻底解决。

当然这个问题的触发原因是未提交事务引起的,如果能在 DELETE 前确保没有活动事务自然可以避免,另外在频繁触发的环境中,可以考虑停用 DBMS_ADVISOR 定时任务(事实上,很多用户并未使用和参考这个特性的结论)。

顺手还发现了 12.2 中的另外一个 BUG:

Bug 21632909 ORA-600[kgldeleteallpinsonobj1] When Create a Table with Attribute Clustering with ZONEMAP

以上供参考。


历史上的今天...
    >> 2010-12-03文章:
    >> 2008-12-03文章:
    >> 2007-12-03文章:
    >> 2005-12-03文章:
           2005年的第一场雪

By eygle on 2019-12-03 11:43 | Comments (0) | Case | Internal | 3378 |


CopyRight © 2004~2020 云和恩墨,成就未来!, All rights reserved.
数据恢复·紧急救援·性能优化 云和恩墨 24x7 热线电话:400-600-8755 业务咨询:010-59007017-7040 or 7037 业务合作: marketing@enmotech.com