Broken durumdaki işlerin tespiti ve düzeltilmesi
Bir iş DBMS_JOB veya DBMS_SCHEDULER kullanımına göre BROKEN olarak işaretlenmesi farklı durumlarda olur.
DBMS_JOB kullanıldığında :
Dbms_job kullanılarak oluşturulan bir iş, üst üste 16 kez başarısız olursa BROKEN olarak işaretlenir. Bazen hata sayısı 16’dan fazla olabilir. Örneğin, 16 hatadan sonra iş otomatik olarak kesilir ve iş elle çalıştırılır ve tekrar başarısız olursa, iş broken olarak kalır ve hatalar 17’ye çıkarılır. Bir iş, DBMS_JOB.BROKEN prosedürü kullanılarak da manuel olarak BROKEN olarak işaretlenebilir.
DBMS_SCHEDULER kullanıldığında :
DBMS_SCHEDULER kullanılırken, iş art arda başarısız olursa ve işin failure_count değerine ulaşılırsa , iş BROKEN olarak işaretlenir. Bu yalnızca iş için max_failures özniteliği ayarlanmışsa geçerlidir, aksi takdirde iş istediğiniz sayıda başarısız olabilir.
Bir işin kaç kere başarısız olduğunda BROKEN olarak işaretleneceğini aşağıdaki komut ile ayarlayabilirsiniz.
SQL> exec dbma_scheduler.set_attribute (name => 'my_job', attribute => 'max_failures',value => 10);
İşi oluşturan kullanıcı, işin sahibi olan kullanıcıdan farklıysa, hem DBMS_JOB hem de DBMS_SCHEDULER işleri BROKEN olarak işaretlenebilir.
Broken durumdaki işler nasıl tespit edilir ?
Broken durumundaki işler aşağıdaki sorgular ile tespit edilebilir.
DBMS_JOB kullanıldığında :
SQL> select * from dba_jobs where broken = 'Y';
DBMS_SCHEDULER kullanıldığında :
SQL>select * from dba_scheduler_jobs where state='BROKEN';
Broken durumdaki işler nasıl düzeltilir ?
Broken olarak işaratlenen iş ile ilgili sorun düzeltildikten sonra ilgili işin broken olma durumu aşağıdaki gibi değiştirilebilir.
DBMS_JOB kullanıldığında :
SQL> exec DBMS_JOB.BROKEN(JOB=> <job_numarası>, BROKEN => FALSE);
DBMS_SCHEDULER kullanıldığında :
SQL> exec DBMS_SCHEDULER.enable(name=> '<job_adı>');