Oracle veritabanlarındaki çöp kutusunun (recyclebin) düzenli olarak temizlenmesi

16 Haz by Ahmet Duruöz

Oracle veritabanlarındaki çöp kutusunun (recyclebin) düzenli olarak temizlenmesi

Oracle veritabanlarında bir tablo drop edildiğinde purge kullanılmaz ise ilgili tablo versiyonlu şekilde çöp kutusuna atılır. Çöp kutusu boşaltılmadığı müddetçe drop edilen tabloya ait segmentler de yer işgal etmeye devam eder.

Hem yer kazanımı sağlamak hem de upgrade işlemleri öncesnde , data dictioanry bakımı gibi işlemlerden önce çöp kutusu boşaltılmalıdır. Bu işlemin veritabanı genelinde düzenli olarak yapılması için bir iş çizelgelenebilir. Bu iş düzenli olarak çöp kutusunu kontrol edecek , boş değilse tüm nesneleri silecektir.

İlgili çizelgelenmiş iş (job) aşağıdaki gibi bir script ile oluşturulabilir. Bu işi SYS kullanıcısı ile çizelgelemeniz gerekmektedir. Bu script PURGE_RECYCLEBIN isminde günde bir defa çalışacak ve veritabanı genelinde çöp kutularını boşaltacaktır.

 

BEGIN
  SYS.DBMS_SCHEDULER.CREATE_JOB
    (
       job_name        => 'SYS.PURGE_RECYCLEBIN'
      ,start_date      => TO_TIMESTAMP_TZ('2020/05/29 00:00:00.000000 Europe/Istanbul','yyyy/mm/dd hh24:mi:ss.ff tzr')
      ,repeat_interval => 'FREQ=DAILY;BYHOUR=1;BYMINUTE=00'      
      ,end_date        => NULL
      ,job_class       => 'DEFAULT_JOB_CLASS'
      ,job_type        => 'PLSQL_BLOCK'
      ,job_action      => '

declare
VSQL varchar2(500);
VSQL1 varchar2(500);
Vcnt number(5);
begin

select count(*) into Vcnt from dba_recyclebin;

if Vcnt>0 then
VSQL1:=''purge dba_recyclebin'';
execute immediate VSQL1;
end if;

end;'
      ,comments        => NULL
    );
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.PURGE_RECYCLEBIN'
     ,attribute => 'RESTARTABLE'
     ,value     => FALSE);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.PURGE_RECYCLEBIN'
     ,attribute => 'LOGGING_LEVEL'
     ,value     => SYS.DBMS_SCHEDULER.LOGGING_RUNS);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
    ( name      => 'SYS.PURGE_RECYCLEBIN'
     ,attribute => 'MAX_FAILURES');
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
    ( name      => 'SYS.PURGE_RECYCLEBIN'
     ,attribute => 'MAX_RUNS');
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.PURGE_RECYCLEBIN'
     ,attribute => 'STOP_ON_WINDOW_CLOSE'
     ,value     => FALSE);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.PURGE_RECYCLEBIN'
     ,attribute => 'JOB_PRIORITY'
     ,value     => 3);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
    ( name      => 'SYS.PURGE_RECYCLEBIN'
     ,attribute => 'SCHEDULE_LIMIT');
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.PURGE_RECYCLEBIN'
     ,attribute => 'AUTO_DROP'
     ,value     => FALSE);

  SYS.DBMS_SCHEDULER.ENABLE
    (name                  => 'SYS.PURGE_RECYCLEBIN');
END;
/

 

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Lütfen captcha kodunu giriniz *

Lütfen Resimdeki Kodu Boşluğa Giriniz.