sql >> Databasteknik >  >> RDS >> Oracle

ORA radera / trunkera

Att radera poster i partier kan göras i en PL/SQL-loop, men anses allmänt vara dålig praxis eftersom hela raderingen normalt ska betraktas som en enda transaktion; och det kan inte göras från SQL*Loader-kontrollfilen. Din DBA bör storleken UNDO utrymme för att rymma det arbete du behöver göra.

Om du tar bort hela tabellen är det nästan säkert bättre att trunkera ändå, antingen i kontrollfilen :

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

Eller som en separat truncate uttalande i SQL*Plus/SQL-utvecklare/någon annan klient innan du startar laddningen:

truncate table import_abc;

Nackdelen är att din tabell kommer att visas tom för andra användare medan de nya raderna laddas, men om det är ett dedikerat importområde (gissning från namnet) kanske det inte spelar någon roll ändå.

Om din ÅNGRA är verkligen så liten så kan du behöva köra flera laddningar, i vilket fall - förmodligen uppenbarligen - måste du se till att du bara har truncate i kontrollfilen för den första (eller använd den separata truncate uttalande), och ha lägga till istället i efterföljande kontrollfiler som du noterade i kommentarerna.

Du kanske också vill överväga externa tabeller om du använder denna data som bas för att fylla i något annat, eftersom det inte finns någon ÅNGA overhead vid byte av den externa datakällan. Du måste förmodligen prata med din DBA om att ställa in det och ge dig de nödvändiga katalogbehörigheterna.



  1. Ta bort rader:Ingen enskild medlem har fler än x poster

  2. Hur man får icke-grupperade kolumner i SQL-sats (liknande i MySQL)

  3. xx tid sedan funktionen fungerar inte

  4. php konvertera array till en hierarkisk kapslad uppsättning för databas