Çizelgelenmiş job için eposta bildirimi eklenmesi
Çizelgelenmiş job için eposta bildirimi tanımlamak mümkündür. Job ile ilgili bir yada birden fazla olaylar oluştuğunda e-posta gönderimi sağlanabilir.
Bildirim oluşturmadan önce aşağıdaki adımların tamamlanmış olması gerekiyor.
Öncelikle job’ı çalıştıran kullanıcı için network acl tanımı yapılıp yetkilerin verilmesi gerekiyor. Bu konuyla ilgili detaylı bilgiye Network Access Control List nedir , nasıl kullanılır ? başlıklı makaleden ulaşabilirsiniz.
Sonrasında e-posta sunucusu adresi ayarlanmalıdır.
SQL> exec dbms_scheduler.set_scheduler_attribute('email_server','192.168.1.10');
smtp_out_server parametresi de ayarlanmalıdır.
SQL> alter system set smtp_out_server='192.168.1.10' scope=both sid='*'; System altered.
Ayrıca tanımlanan e-posta sunucusunda, veritabanı sunucuları için relay tanımı yapılması gerekmektedir.
Bu işlemler sonrasında DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION prosedürü ile bildirimler ekleyebiliriz.
Örnek :
Prosedürde ‘%’ karakteri ile parametreleri belirtebiliyoruz.
Birden fazla olay için bildirim oluşturmak :
BEGIN DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION ( job_name => 'JOB_ISMI', recipients => 'jobbildirim@deneme.com, jobbildirim@test.com', sender => 'do_not_reply@deneme.com', subject => 'Job Bildirimi-%job_owner%.%job_name%-%event_type%', body => '%event_timestamp% tarihinde %event_type% olustu. %error_message%', events => 'JOB_FAILED, JOB_BROKEN, JOB_DISABLED, JOB_SCH_LIM_REACHED'); END; /
Tek bir olay için bildirim oluşturmak :
BEGIN DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION ( job_name => 'JOB_ISMI', recipients => 'jobbildirim@deneme.com', events => 'JOB_BROKEN'); END; /
Belirli koşula göre bildirim oluşturmak :
Job failed olduğunda hata kodu 600 yada 700 ise bildirim gönderecektir.
BEGIN DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION ( job_name => 'JOB_ISMI', recipients => 'jobbildirim@deneme.com, jobbildirim@test.com', sender => 'do_not_reply@deneme.com', subject => 'Job Bildirimi-%job_owner%.%job_name%-%event_type%', body => '%event_timestamp% tarihinde %event_type% olustu. %error_message%', events => 'JOB_FAILED', filter_condition => ':event.error_code=600 or :event.error_code=700'); END; /
Prosedürde event parametresi ile olay belirtilmezse aşağıdaki varsayılan olaylar için bildirim oluşacaktır.
JOB_FAILED,JOB_BROKEN,JOB_SCH_LIM_REACHED,JOB_CHAIN_STALLED,JOB_OVER_MAX_DUR
Bildirim oluşturulabilecek olaylar aşağıdaki gibidir :
- job_all_events
- job_broken
- job_chain_stalled
- job_completed
- job_disabled
- job_failed
- job_over_max_dur
- job_run_completed
- job_sch_lim_reached
- job_started
- job_stopped
- job_succeeded
Bu olaylar için tek tek bildirim tanımlanabildiği gibi birden fazla olay için tek bildirim de tanımlanabilir.
Tanımlı bildirimleri aşağıdaki gibi sorgulayabiliriz :
SQL> SELECT JOB_NAME, RECIPIENT, EVENT FROM DBA_SCHEDULER_NOTIFICATIONS; JOB_NAME RECIPIENT EVENT ----------- ----------------------- ------------------- TEST_USER jobbildirim@deneme.com JOB_FAILED TEST_USER jobbildirim@deneme.com JOB_BROKEN TEST_USER jobbildirim@deneme.com JOB_SCH_LIM_REACHED TEST_USER jobbildirim@deneme.com JOB_DISABLED TEST_USER jobbildirim@test.com JOB_FAILED TEST_USER jobbildirim@test.com JOB_BROKEN TEST_USER jobbildirim@test.com JOB_SCH_LIM_REACHED TEST_USER jobbildirim@test.com JOB_DISABLED
Tanımlı bildirimlerin silinmesi :
Silme işlemi için DBMS_SCHEDULER.REMOVE_JOB_EMAIL_NOTIFICATION prosedürünü kullanabiliriz.
BEGIN DBMS_SCHEDULER.REMOVE_JOB_EMAIL_NOTIFICATION ( job_name => 'JOB_ISMI', recipients => 'jobbildirim@deneme.com, jobbildirim@test.com', events => 'JOB_FAILED, JOB_BROKEN, JOB_DISABLED, JOB_SCH_LIM_REACHED'); END; /
Bildirimleri kaldırmak için tek tek recipients ve events belirtebildiğimiz gibi yukarıdaki gibi toplu halde de bildirimleri kaldırabiliriz.
REMOVE_JOB_EMAIL_NOTIFICATION prosedürü ile ilgili aşağıdaki durumlara dikkat edilmesi gerekmektedir :
- Events parametresi NULL gönderilirse, belirtilen alıcılar (recipients) için tanımlı tüm bildirimler kaldırılır.
- Recipients parametresi NULL gönderilirse, belirtilen olaylar (events) için tanımlı tüm bildirilmler kaldırılır.
- Hem Events hem Recipients parametreleri NULL gönderilirse , tüm tanımlı bildirimler kaldırılacaktır.
- Bildirim kaldırma işlemi sırasında daha önceden tanımlanmamış bir bildirim kaldırılmaya çalışılırsa herhangi bir hata üretmeyecektir.