sql >> Database >  >> RDS >> Oracle

ORA verwijderen / afkappen

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.



  1. MySQL prijs- en voorraadvergelijking

  2. Hoe te UPSERT (MERGE, INSERT ... OP DUPLICATE UPDATE) in PostgreSQL?

  3. Herstel na verkeerde MySQL-updatequery?

  4. Wat is er mis met mijn MySQL-statement?