Table Truncate Job Oluşturmak (DMBS_SCHEDULER)
Verilerin düzenli olarak temizlenmesi adına iki adet tabloda truncate işleminin aylık olarak otomatik tanımlanmasını anlatıyorum.
İki adet tablonun aylık olarak truncate edilmesi için job’ı aşağıdaki gibi oluşturuyorum.
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'TRUNCATE_TABLES_JOB',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN
EXECUTE IMMEDIATE ''TRUNCATE TABLE CCB.BILLING_LOG'';
EXECUTE IMMEDIATE ''TRUNCATE TABLE CCB.BILLING_LOG_PARAMS'';
END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=MONTHLY; BYMONTHDAY=1; BYHOUR=0; BYMINUTE=0; BYSECOND=0',
enabled => TRUE
);
END;
/
Kısaca parametrelerin üzerinden geçmek gerekirse;
job_name
: Çalışacak işinize vereceğiniz herhangi bir ad.
job_type
: İşimizin türünü belirliyor, ben PLSQL kod block olarak çalıştıracağım için o şekilde belirliyorum. Diğer job türleri için tıklayın.
job_action
: Hangi PLSQL komutu çalıştırılacak burada belirtilir.
Burada CCB şeması altındaki BILLING_LOG ve BILLING_LOG_PARAMS tabloları için truncate uygulanmasını istiyorum.
start_date
: SYSTIMESTAMP ile job’ı çalıştırdığınız andan itibaren geçerli olur. Başlangıç için spesifik bir tarih girilebilir.
repeate_interval
: İşin her ayın 1'inde, saat 00:00'da (gece yarısı) çalışmasını sağlar. FREQ=MONTHLY
işin aylık olarak tekrar etmesini, BYMONTHDAY=1
işin ayın ilk gününde çalışmasını sağlar.
Yukarıdaki prosedürde enabled kısmı ile job otomatik olarak başlayacaktır ancak job aktif duruma gelmez ise manuel olarak da bu işlem gerçekleştirilebilir.
BEGIN
DBMS_SCHEDULER.ENABLE(name => 'TRUNCATE_TABLES_JOB');
END;
/
Job oluşturulduktan sonra değişiklik yapıp, yorum satırı eklemek için set_attribute kullanıyoruz. Yorum eklemek için value kısmına istediğiniz bilgileri girebilirsiniz.
BEGIN
DBMS_SCHEDULER.set_attribute (
name => 'TRUNCATE_TABLES_JOB',
attribute => 'COMMENTS',
value => 'This job is used to truncate tables monthly.'
);
END;
/
Yorum satırı ekledikten sonra comments kısmına yansıdığını görüyorum.
Job ismine göre aktiflik durumunu kontrol etmek için;
SQL> SELECT JOB_NAME, STATE FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME LIKE 'TRUNCATE%';
JOB_NAME STATE
---------------------- ---------------
TRUNCATE_TABLES_JOB SCHEDULED