剛接手的一個Oracle 12C數據庫,配置監控告警日志的作業時,發現告警日志中有大量下面錯誤,而且這些錯誤一般是晚上22點出現
Errors in file /home/u01/app/oracle/diag/rdbms/xxx/xxx/trace/xxx_j000_106602.trc:
ORA-12012: error on auto execute of job "SYS"."ORA$AT_OS_OPT_SY_128403"
ORA-20001: Statistics Advisor: Invalid task name for the current user
ORA-06512: at "SYS.DBMS_STATS", line 47207
ORA-06512: at "SYS.DBMS_STATS_ADVISOR", line 882
ORA-06512: at "SYS.DBMS_STATS_INTERNAL", line 20059
ORA-06512: at "SYS.DBMS_STATS_INTERNAL", line 22201
ORA-06512: at "SYS.DBMS_STATS", line 47197
數據庫版本信息如下所示:
SQL> select * from v$version;
BANNER CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Standard 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
SQL>
查了一下官方文檔,結合當前獲取的信息分析,很有可能是遇到了Bug 25710407,很有可能當時的DBA使用DBCA建庫,而且使用的是General_Pupose.dbc或 Data_Warehouse.dbc這個模板。
When creating a database using the DBCA from the General_Pupose.dbc or Data_Warehouse.dbc templates (or from the Seed Database) using the 12.2.0.1 Production SH in Linux and Solaris platform, the following errors in the database alert log are returned:
ORA-12012 , ORA-20001 AND ORA-06512 FROM ORA$AT_OS_OPT_SY_XXX
Platforms : Linux 12.2.0.1 Production SH
Solaris 12.2.0.1 Production SH
The database alert log contents are:
Errors in file
/u01/app/oracle/diag/rdbms/orcl/ORCL1/trace/ORCL1_j000_73185.trc:
ORA-12012: error on auto execute of job "SYS"."ORA$AT_OS_OPT_SY_936"
ORA-20001: Statistics Advisor: Invalid task name for the current user
ORA-06512: at "SYS.DBMS_STATS", line 47207
ORA-06512: at "SYS.DBMS_STATS_ADVISOR", line 882
ORA-06512: at "SYS.DBMS_STATS_INTERNAL", line 20059
ORA-06512: at "SYS.DBMS_STATS_INTERNAL", line 22201
ORA-06512: at "SYS.DBMS_STATS", line 47197
2017-03-13T00:47:21.394481+00:00
此問題出現的根本原因是創建的數據庫中的統計信息顧問任務( Stats Advisor Tasks)不可用
set linesize 1080;
col name for a30;
select name
, ctime
, how_created
from sys.wri$_adv_tasks
where owner_name = 'SYS'
and name in ('AUTO_STATS_ADVISOR_TASK','INDIVIDUAL_STATS_ADVISOR_TASK');
驗證了一下,在CDB$ROOT下面使用上面腳本,確實沒有記錄
SQL> show con_name;
CON_NAME
------------------------------
CDB$ROOT
SQL> set linesize 1080;
col name for a30;
select name
, ctime
, how_created
from sys.wri$_adv_tasks
where owner_name = 'SYS'
and name in ('AUTO_STATS_ADVISOR_TASK','INDIVIDUAL_STATS_ADVISOR_TASK');
no rows selected
SQL>
切換到對應的PDB,發現有記錄
SQL> set linesize 1080;
col name for a30;
select name
, ctime
, how_created
from sys.wri$_adv_tasks
where owner_name = 'SYS'
and name in ('AUTO_STATS_ADVISOR_TASK','INDIVIDUAL_STATS_ADVISOR_TASK');SQL> SQL> 2 3 4 5 6
NAME CTIME HOW_CREATED
------------------------------ ------------- ---------------
AUTO_STATS_ADVISOR_TASK 26-JAN-17 CMD
INDIVIDUAL_STATS_ADVISOR_TASK 26-JAN-17 CMD
SQL>
切換回容器CDB$ROOT下,執行下面SQL后
exec dbms_stats.init_package();
執行后可以見到作業記錄了。過后觀察了幾天,發現告警日志中再也沒有這些錯誤了。問題也算徹底解決了!
SQL> set linesize 1080;
col name for a30;
select name
, ctime
, how_created
from sys.wri$_adv_tasks
where owner_name = 'SYS'
and name in ('AUTO_STATS_ADVISOR_TASK','INDIVIDUAL_STATS_ADVISOR_TASK');
NAME CTIME HOW_CREATED
----------------------------- ------------- ----------------
AUTO_STATS_ADVISOR_TASK 03-DEC-21 CMD
INDIVIDUAL_STATS_ADVISOR_TASK 03-DEC-21 CMD
參考資料:
https://docs.oracle.com/database/122/READM/dbca-known-bugs.htm#READM-GUID-DBD9265E-2964-42AA-A534-FB4B9F35BB72