sql >> Database teknologi >  >> RDS >> Oracle

ORA slette / afkorte

Sletning af poster i batches kan ske i en PL/SQL-løkke, men anses generelt for dårlig praksis, da hele sletningen normalt skal betragtes som en enkelt transaktion; og det kan ikke gøres fra SQL*Loader-kontrolfilen. Din DBA skal have størrelsen UNDO plads til at rumme det arbejde, du skal udføre.

Hvis du sletter hele tabellen, vil du næsten helt sikkert være bedre stillet til at afkorte alligevel, enten i kontrolfilen :

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 sætning i SQL*Plus/SQL-udvikler/en anden klient, før du starter indlæsningen:

truncate table import_abc;

Ulempen er, at din tabel vil fremstå tom for andre brugere, mens de nye rækker indlæses, men hvis det er et dedikeret importområde (gætte ud fra navnet), er det måske alligevel ligegyldigt.

Hvis din UNDO er virkelig så lille, så skal du muligvis køre flere belastninger, i hvilket tilfælde - sandsynligvis selvfølgelig - du skal sikre dig, at du kun har truncate i kontrolfilen for den første (eller brug den separate truncate). erklæring), og lad tilføje i stedet for i efterfølgende kontrolfiler, som du bemærkede i kommentarer.

Du kan også overveje eksterne tabeller hvis du bruger disse data som en base til at udfylde noget andet, da der ikke er nogen UNDO overhead ved udskiftning af den eksterne datakilde. Du bliver sandsynligvis nødt til at tale med din DBA om at konfigurere det og give dig de nødvendige mappetilladelser.



  1. Hvordan får man det sidst indsatte ID?

  2. Få en liste med start- og slutværdier fra tabel over datotider

  3. Efter en PostgreSQL-gendannelse får jeg tilladelse nægtet til relation django_session

  4. Sådan beregnes daglige aktive brugere (DAU) i MySQL