sql >> Databáze >  >> RDS >> Oracle

ORA odstranit / zkrátit

Mazání záznamů v dávkách lze provádět ve smyčce PL/SQL, ale obecně se to považuje za špatnou praxi, protože celé odstranění by mělo být normálně považováno za jednu transakci; a to nelze provést z ovládacího souboru SQL*Loader. Váš DBA by měl mít velikost UNDO prostor pro práci, kterou musíte udělat.

Pokud odstraňujete celou tabulku, téměř jistě bude lepší provést zkrácení, buď v ovládacím souboru :

options(skip=1,load=250000,errors=0,ROWS=30000,BINDSIZE=10485760)
load data
infile 'G:1.csv' "str '^_^'"
truncate
into table IMPORT_ABC
...

Nebo jako samostatný truncate v SQL*Plus/SQL Developer/nějakém jiném klientovi před zahájením načítání:

truncate table import_abc;

Nevýhodou je, že při načítání nových řádků se ostatním uživatelům bude vaše tabulka zdát prázdná, ale pokud se jedná o vyhrazenou oblast pro import (odhaduji z názvu), na tom stejně nemusí záležet.

Pokud váš UNDO je opravdu tak malý, že možná budete muset spustit více zátěží, v takovém případě – pravděpodobně samozřejmě – se musíte ujistit, že máte pouze truncate v kontrolním souboru pro první z nich (nebo použijte samostatný truncate prohlášení) a append kód> místo toho v následných kontrolních souborech, jak jste poznamenali v komentářích.

Můžete také zvážit externí tabulky pokud tato data používáte jako základ k naplnění něčeho jiného, ​​protože neexistuje žádné UNDO režii na výměnu externího zdroje dat. Pravděpodobně si budete muset promluvit se svým DBA o tom, jak to nastavit a dát vám potřebná oprávnění k adresářům.



  1. Jak získat záznamy za posledních 7 dní v MySQL

  2. jak vložit datum a čas do tabulky databáze SQL?

  3. Jak stáhnout osolené heslo z databáze a auth uživatele?

  4. GWFG v Oracle RAC