ORA-20001: Statistics Advisor: Invalid task name for the current user
12c veritabanlarında , veritabanı oluşturma işlemi sırasında yaşanan sorunlara bağlı olarak SYS.ORA$AT_OS_OPT_SY_<NN> otomatik job’ı çalıştığında alert log dosyasında ORA-20001 hatası görülmektedir. Hatanın giderilmesi için, ilgili job’ı drop edip yeniden oluşturmak gerekiyor. Hatalar aşağıdaki gibi olacaktır.
ORA-12012: error on auto execute of job "SYS"."ORA$AT_OS_OPT_SY_72" 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
Öncelikle aşağıdaki komut ile task’lerin doğru şekilde oluşmasını sağlamak gereklidir.
SQL> EXEC dbms_stats.init_package(); PL/SQL procedure successfully completed.
Sonrasında aşağıdaki sorgu ile job’ın sahibinin tespiti gereklidir.
SQL> select name, ctime, how_created,OWNER_NAME from sys.wri$_adv_tasks where name in ('AUTO_STATS_ADVISOR_TASK','INDIVIDUAL_STATS_ADVISOR_TASK');
Aşağıdaki gibi bir çıktı görürseniz , SYS ile bağlanıp işlem yapılmalıdır. Eğer job sahibi farklı bir kullanıcı ise o kullanıcı ile bağlanıp işlem yapılmalıdır.
NAME CTIME HOW_CREATED ----------------------------------- ------------------ ------------------------------ OWNER_NAME ------------------------------------------------------------------------------------------------------------------------ AUTO_STATS_ADVISOR_TASK 13-OCT-18 CMD SYS INDIVIDUAL_STATS_ADVISOR_TASK 13-OCT-18 CMD SYS
Bu durumda sys ile sqlplus aracılığı ile bağlanıp task’ler drop edildikten sonra yeniden doğru şekilde oluşturulmalıdır.
Drop işlemleri aşağıdaki gibi yapılabilir.
SQL> DECLARE v_tname VARCHAR2(32767); BEGIN v_tname := 'AUTO_STATS_ADVISOR_TASK'; DBMS_STATS.DROP_ADVISOR_TASK(v_tname); END; / PL/SQL procedure successfully completed. SQL> DECLARE v_tname VARCHAR2(32767); BEGIN v_tname := 'INDIVIDUAL_STATS_ADVISOR_TASK'; DBMS_STATS.DROP_ADVISOR_TASK(v_tname); END; / PL/SQL procedure successfully completed.
Drop sonrasında aşağıdaki gibi yeniden oluşturulmalıdır.
SQL> EXEC DBMS_STATS.INIT_PACKAGE(); PL/SQL procedure successfully completed.
sonrasında alert.log dosyasında ilgili hatalar gelmeyecektir.