轉發自 惜分飛:http://www.xifenfei.com/tag/wri_adv_sqlt_rtn_plan
近日遇到告警日誌報錯,如下:
2020-06-04T16:31:48.532177+08:00
WARNING: too many parse errors, count=513 SQL hash=0x750004bb
PARSE ERROR: ospid=32623, error=933 for statement:
2020-06-04T16:31:48.532328+08:00
DELETE FROM wri$_adv_sqlt_rtn_planWHERE task_id = :tid AND exec_name = :execution_name
Additional information: hd=0x2bea60738 phd=0x2bea60968 flg=0x28 cisid=0 sid=0 ciuid=0 uid=0
2020-06-04T16:31:48.567323+08:00
----- PL/SQL Call Stack -----
object line object
handle number name
0x460e30f08 259 type body SYS.WRI$_ADV_SQLTUNE.SUB_DELETE_EXECUTION
0x6b8d30e8 2134 package body SYS.PRVT_ADVISOR.COMMON_DELETE_TASK
0x6b8d30e8 7342 package body SYS.PRVT_ADVISOR.DELETE_EXPIRED_TASKS
0x474636780 1 anonymous block
2020-06-04T16:31:50.024334+08:00
WARNING: too many parse errors, count=613 SQL hash=0x750004bb
PARSE ERROR: ospid=32623, error=933 for statement:
2020-06-04T16:31:50.024485+08:00
DELETE FROM wri$_adv_sqlt_rtn_planWHERE task_id = :tid AND exec_name = :execution_name
Additional information: hd=0x2bea60738 phd=0x2bea60968 flg=0x28 cisid=0 sid=0 ciuid=0 uid=0
找到了最靠譜的飛大哥的Blog。特此記錄。
數據庫版本
SQL> set lines 200
SQL> select * from v$version;
BANNER CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 0
PL/SQL Release 12.2.0.1.0 - Production 0
CORE 12.2.0.1.0 Production 0
TNS for Linux: Version 12.2.0.1.0 - Production 0
NLSRTL Version 12.2.0.1.0 - Production 0
alert 日誌報錯
每天的早上9:19 左右都會有這麼一坨的報錯。強迫症患者要犯病了。!!
2020-06-04T08:09:19.535349+08:00
WARNING: too many parse errors, count=100 SQL hash=0x750004bb
PARSE ERROR: ospid=28430, error=933 for statement:
2020-06-04T08:09:19.535490+08:00
DELETE FROM wri$_adv_sqlt_rtn_planWHERE task_id = :tid AND exec_name = :execution_name
Additional information: hd=0x2bea60738 phd=0x2bea60968 flg=0x28 cisid=0 sid=0 ciuid=0 uid=0
2020-06-04T08:09:19.535632+08:00
----- PL/SQL Call Stack -----
object line object
handle number name
0x460e30f08 259 type body SYS.WRI$_ADV_SQLTUNE.SUB_DELETE_EXECUTION
0x6b8d30e8 2134 package body SYS.PRVT_ADVISOR.COMMON_DELETE_TASK
0x6b8d30e8 7342 package body SYS.PRVT_ADVISOR.DELETE_EXPIRED_TASKS
0x7776f560 1 anonymous block
2020-06-04T08:09:24.309711+08:00
WARNING: too many parse errors, count=200 SQL hash=0x750004bb
PARSE ERROR: ospid=28430, error=933 for statement:
2020-06-04T08:09:24.309846+08:00
DELETE FROM wri$_adv_sqlt_rtn_planWHERE task_id = :tid AND exec_name = :execution_name
Additional information: hd=0x2bea60738 phd=0x2bea60968 flg=0x28 cisid=0 sid=0 ciuid=0 uid=0
2020-06-04T08:09:24.310005+08:00
----- PL/SQL Call Stack -----
object line object
handle number name
0x460e30f08 259 type body SYS.WRI$_ADV_SQLTUNE.SUB_DELETE_EXECUTION
0x6b8d30e8 2134 package body SYS.PRVT_ADVISOR.COMMON_DELETE_TASK
0x6b8d30e8 7342 package body SYS.PRVT_ADVISOR.DELETE_EXPIRED_TASKS
0x7776f560 1 anonymous block
2020-06-04T08:09:26.535249+08:00
WARNING: too many parse errors, count=300 SQL hash=0x750004bb
PARSE ERROR: ospid=28430, error=933 for statement:
2020-06-04T08:09:26.535401+08:00
DELETE FROM wri$_adv_sqlt_rtn_planWHERE task_id = :tid AND exec_name = :execution_name
Additional information: hd=0x2bea60738 phd=0x2bea60968 flg=0x28 cisid=0 sid=0 ciuid=0 uid=0
2020-06-04T08:09:26.535567+08:00
----- PL/SQL Call Stack -----
object line object
handle number name
0x460e30f08 259 type body SYS.WRI$_ADV_SQLTUNE.SUB_DELETE_EXECUTION
0x6b8d30e8 2134 package body SYS.PRVT_ADVISOR.COMMON_DELETE_TASK
0x6b8d30e8 7342 package body SYS.PRVT_ADVISOR.DELETE_EXPIRED_TASKS
0x7776f560 1 anonymous block
WARNING: too many parse errors, count=400 SQL hash=0x750004bb
PARSE ERROR: ospid=28430, error=933 for statement:
2020-06-04T08:09:27.481993+08:00
DELETE FROM wri$_adv_sqlt_rtn_planWHERE task_id = :tid AND exec_name = :execution_name
Additional information: hd=0x2bea60738 phd=0x2bea60968 flg=0x28 cisid=0 sid=0 ciuid=0 uid=0
2020-06-04T08:09:27.482208+08:00
----- PL/SQL Call Stack -----
object line object
handle number name
0x460e30f08 259 type body SYS.WRI$_ADV_SQLTUNE.SUB_DELETE_EXECUTION
0x6b8d30e8 2134 package body SYS.PRVT_ADVISOR.COMMON_DELETE_TASK
0x6b8d30e8 7342 package body SYS.PRVT_ADVISOR.DELETE_EXPIRED_TASKS
0x7776f560 1 anonymous block
這裏比較明顯由於DELETE FROM wri$_adv_sqlt_rtn_planWHERE這條sql語法不對,導致無法解析因此報了ORA-00933錯誤.
情景再現
手動執行以下調用SQL,會再次觸發該問題:
SQL> exec SYS.PRVT_ADVISOR.DELETE_EXPIRED_TASKS();
PL/SQL procedure successfully completed.
就是他!就是他! 。。報錯如下:
2020-06-04T16:31:50.024688+08:00
----- PL/SQL Call Stack -----
object line object
handle number name
0x460e30f08 259 type body SYS.WRI$_ADV_SQLTUNE.SUB_DELETE_EXECUTION
0x6b8d30e8 2134 package body SYS.PRVT_ADVISOR.COMMON_DELETE_TASK
0x6b8d30e8 7342 package body SYS.PRVT_ADVISOR.DELETE_EXPIRED_TASKS
0x474636780 1 anonymous block
2020-06-04T16:31:51.234957+08:00
WARNING: too many parse errors, count=713 SQL hash=0x750004bb
PARSE ERROR: ospid=32623, error=933 for statement:
.
.(此處忽略了大部分報錯)
.
....
證明該程序本身有問題,屬於oracle bug範疇,查詢mos發現相關Bug 26764561 : ORA-00933 IN SYS.WRI$_ADV_SQLTUNE.SUB_DELETE_EXECUTION
解決辦法
惜分飛大哥指出明路,,打補丁: