makaleler / Veritabanı / Veritabanı hızlı tablo boşaltma

Veritabanı hızlı tablo boşaltma

01.07.2016 10:11:28

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;
yazar husonet

Yorumlar

Bu içerik için sizde yorum yapabilirsiniz!
anasayfa | makaleler | haberler | dosyalar | linkler | hakkımızda