Hogyan töröld az összes Oracle táblát?


by Håkan Dahlström, on Flickr

Újra kellett húzni egy DB-t, nem volt hozzá korrekt dump, úgy kellett összeügyeskedni SQL Developer DB-Exporttal, ami kvázi előre vetítette, hogy az import se fog olyan egyszerűen végigfutni. A legegyszerűbb megoldás az volt, ha 1-1 hiba javítása után újrakezdtem a komplett dump importálását (egyébként egy cirka 500MB-s SQL file-ról beszélünk, ami INSERT statementekből áll – no comment). Csakhogy mire a hibához elértem, addigra már tetszőleges számú sort insertálhatott, unique indexek híjján pedig tetszőlegesen tudtam duplikálni az adatokat táblán belül. A megoldás az alábbi kis szösszenet lett, amit a stackoverflow-n találtam.

begin
  for r in (select table_name from user_tables) loop
    execute immediate 'truncate table ' || r.table_name;
  end loop;
end;

Kicsit gondosabb ügymenetnél, és meglévő foreign key-ek esetén az alábbi kódot érdemes használni, mivel az előzőnél nagy valószínűséggel hibákba fogunk ütközni.

begin

for c1 in (select table_name, constraint_name from user_constraints) loop
    begin
        execute immediate ('alter table '||c1.table_name||' disable constraint '||c1.constraint_name);
    end;
end loop;

for t1 in (select table_name from user_tables) loop
    begin
        execute immediate ('truncate table '||t1.table_name);
    end;
end loop;

for c2 in (select table_name, constraint_name from user_constraints) loop
    begin
        execute immediate ('alter table '||c2.table_name||' enable constraint '||c2.constraint_name);
    end;
end loop;

end;
/

4 Comments

Comments are closed.