12C DELETE FROM wri$_adv_sqlt_rtn_planWHERE task_id = :tid AND exec_name = :execution_name

轉發自 惜分飛: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

解決辦法

惜分飛大哥指出明路,,打補丁:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章