Het verwijderen van records in batches kan worden gedaan in een PL/SQL-lus, maar wordt over het algemeen als een slechte gewoonte beschouwd, aangezien de volledige verwijdering normaal gesproken als een enkele transactie moet worden beschouwd; en dat kan niet worden gedaan vanuit het SQL*Loader-besturingsbestand. Uw DBA moet de grootte van de UNDO
ruimte voor het werk dat u moet doen.
Als je de hele tabel verwijdert, kun je vrijwel zeker beter afkappen, ofwel in het controlebestand :
options(skip=1,load=250000,errors=0,ROWS=30000,BINDSIZE=10485760)
load data
infile 'G:1.csv' "str '^_^'"
truncate
into table IMPORT_ABC
...
Of als een aparte truncate
statement in SQL*Plus/SQL Developer/een andere client voordat u het laden start:
truncate table import_abc;
Het nadeel is dat uw tabel leeg lijkt voor andere gebruikers terwijl de nieuwe rijen worden geladen, maar als het een speciaal importgebied is (afgaande op de naam), maakt dat misschien niet uit.
Als uw UNDO
is echt zo klein, dan moet u mogelijk meerdere belastingen uitvoeren, in welk geval - waarschijnlijk uiteraard - u ervoor moet zorgen dat u alleen de truncate
hebt in het controlebestand voor de eerste (of gebruik de aparte truncate
statement), en append
in plaats daarvan in volgende controlebestanden, zoals je hebt opgemerkt in opmerkingen.
U kunt ook overwegen externe tabellen
als u deze gegevens als basis gebruikt om iets anders in te vullen, aangezien er geen UNDO
is overhead bij het vervangen van de externe gegevensbron. U zult waarschijnlijk met uw DBA moeten overleggen om dat in te stellen en u de benodigde directory-machtigingen te geven.