Pythontr

husonet | Tarih: 01.07.2016

Veritabanı hızlı tablo boşaltma

Oracle veritabanı üzerinde büyük tablolar üzerinde hızlı sql tablo kaydı silme işlemleri.

Büyük Veritabanları üzerinde çalıştıysanız bazen tabloları belirli kayıtları üzerinden silme işlemi yapmak istemişsinizdir. Bizimde başımıza böyle bişey geldi. Müşterimize ait database de LOG tablosunda 50.000.000 civarında kayıt oluştuğunu gördük. Bunu sistematik bir şekilde azaltmak istediğimiz için belirli kayıt silme aşamalarından sonra commit leme yaparak sisteme nefes aldıracağımıza düşünüyoruz.


Aşağıdaki örneğimizde döngü sayısını ayarlayabiliyoruz.
SET SERVEROUTPUT ON
declare
say INTEGER;
begin
say := 0;
DBMS_OUTPUT.ENABLE(1000000);
DBMS_OUTPUT.PUT_LINE('Silme Basladi!');
while say < 100 LOOP
delete from test where test_dlt = 1 and rownum <= 1000;
DBMS_OUTPUT.PUT_LINE( SQL%ROWCOUNT || ' rows deleted');
-- EXIT WHEN SQL%ROWCOUNT = 0;
say := say + 1;
COMMIT;
END LOOP;
COMMIT;
end;

Bu örneğimizde ise döngü sayımız kayıt sayısı 0 a düşüne kadar çalışıyor.
SET SERVEROUTPUT ON
begin
DBMS_OUTPUT.ENABLE(1000000);
DBMS_OUTPUT.PUT_LINE('Silme Basladi!');
LOOP
delete from test where test_dlt = 1 and rownum <= 1000;
DBMS_OUTPUT.PUT_LINE( SQL%ROWCOUNT || ' rows deleted');
EXIT WHEN SQL%ROWCOUNT = 0;
COMMIT;
END LOOP;
COMMIT;
end;