Table Truncate Job Oluşturmak (DMBS_SCHEDULER)

Ezgi Küçükali
2 min readAug 1, 2024

--

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

--

--