ORA-12012: error on auto execute of job “SYS”.”BSLN_MAINTAIN_STATS_JOB” sorununun çözümü
BSLN_MAINTAIN_STATS_JOB işi , ORA-12012: error on auto execute of job “SYS”.”BSLN_MAINTAIN_STATS_JOB” ve ORA-06502: PL/SQL: numeric or value error hataları ile sonlandığında çözüm olarak soruna sebep olan baseline bilgisinin silinmesi gerekmektedir.
Bu hata genellikle , daha önceden bir instance için oluşturulmuş baseline mevcut ise ilgili instance’ın silindikten sonraki çalışmalarında karşılaşılmaktadır.
Muhtemel hatalar aşağıdaki gibi olacaktır.
SQL> EXEC DBMS_SCHEDULER.RUN_JOB('BSLN_MAINTAIN_STATS_JOB'); BEGIN DBMS_SCHEDULER.RUN_JOB('BSLN_MAINTAIN_STATS_JOB'); END; * ERROR at line 1: ORA-06502: PL/SQL: numeric or value error ORA-06512: at "DBSNMP.BSLN_INTERNAL", line 2073 ORA-06512: at line 1 ORA-06512: at "SYS.DBMS_ISCHED", line 185 ORA-06512: at "SYS.DBMS_SCHEDULER", line 486 ORA-06512: at line 1
Mevcut baseline bilgilerini sorguladığımızda , sorun yaratan veri , instance_name olarak mevcut durumda olmayan satır yada LAST_COMPUTE_DATE alanındaki veri diğerlerinden farklı olan satırlardır diyebiliriz. Bu satırların silinmesi gerekmektedir.
SQL> set lines 10000 SQL> select * from DBSNMP.BSLN_BASELINES; DBID INSTANCE_NAME BASELINE_ID BSLN_GUID TIMEGR AUT STATUS LAST_COMPUTE_DATE ---------- ------------------------------------------------ ----------- -------------------------------- ------ --- ------------------------------------------------ ------------------ 1356374413 ORCL2 0 440ABCB48C49D5F9A00794CDC2EA519E XX Y ACTIVE 05-FEB-17 1356374413 ORCL1 0 E75CA15C8DDA8B27A7FBC49A12E6124C XX Y ACTIVE 05-FEB-17 1356374413 ORCL3 0 A9A4DA860AD6E745434273C1E08BFE09 HX Y ACTIVE 05-FEB-17 1356374413 ORCL4 0 BD6A23DD119E4FB2DDF1674DA4D633E4 ND Y ACTIVE 29-JUL-12
Yukarıdaki bilgilere göre sorun yaratan satır ORCL4 instance için olan satır olarak görülmektedir. Bu kaydı aşağıdaki gibi siliyoruz.
SQL> DELETE FROM DBSNMP.BSLN_BASELINES WHERE INSTANCE_NAME ='ORCL4'; 1 row deleted. SQL> commit; Commit complete.
Sonrasında ilgili job’ı çalıştırdığımızda sorunsuz tamamlanacaktır.
SQL> EXEC DBMS_SCHEDULER.RUN_JOB('BSLN_MAINTAIN_STATS_JOB'); PL/SQL procedure successfully completed.
İşlemleri sorgulamak için aşağıdaki sorguyu kullanabiliriz. Sorgu sonusundan da görüleceği gibi en son manuel olarak çalıştırılan job, SUCCEEDED şeklinde bitmiş olacaktır.
SELECT * FROM ( SELECT owner, job_name, log_date, status, run_duration FROM dba_scheduler_job_run_details a WHERE job_name = 'BSLN_MAINTAIN_STATS_JOB' ORDER BY log_date) WHERE ROWNUM < 10;
Bu job , otomatik olarak hafta sonları çalışmaktadır.