Ú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; /
Egy rollback nem lett volna elég exception esetén?
https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/sqloperations.htm#i7105
De, ha nem lett volna auto-commit beállítva :/
Áhhááá. Értem.
🙁 🙁 🙁
Mindenesetre a posztot mentettem, jól jöhet még később 😀
(y) én is azért írtam meg, mert a stackoverflow-n eltűnhet, de nálam meg fog maradni 😀