ORA-20001: Statistics Advisor: Invalid task name for the current user

13 Eki by Ahmet Duruöz

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.

Loading

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir