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;
/