Oracle
 sql >> Datenbank >  >> RDS >> Oracle

ORA löschen / abschneiden

Das Löschen von Datensätzen in Stapeln kann in einer PL/SQL-Schleife erfolgen, wird jedoch im Allgemeinen als schlechte Praxis angesehen, da das gesamte Löschen normalerweise als eine einzelne Transaktion betrachtet werden sollte. und das kann nicht innerhalb der SQL*Loader-Steuerdatei erfolgen. Ihr DBA sollte das UNDO anpassen Platz für die Arbeit, die Sie erledigen müssen.

Wenn Sie die gesamte Tabelle löschen, ist es mit ziemlicher Sicherheit sowieso besser, sie abzuschneiden, entweder in der Steuerdatei :

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

Oder als separates truncate -Anweisung in SQL*Plus/SQL Developer/einem anderen Client, bevor Sie mit dem Laden beginnen:

truncate table import_abc;

Der Nachteil ist, dass Ihre Tabelle für andere Benutzer leer erscheint, während die neuen Zeilen geladen werden, aber wenn es sich um einen dedizierten Importbereich handelt (den Namen zu erraten), spielt das möglicherweise sowieso keine Rolle.

Wenn Ihr UNDO wirklich so klein ist, müssen Sie möglicherweise mehrere Ladevorgänge ausführen. In diesem Fall müssen Sie - wahrscheinlich offensichtlich - sicherstellen, dass Sie nur den truncate haben in der Steuerdatei für die erste (oder verwenden Sie die separate truncate Anweisung) und haben append stattdessen in nachfolgenden Steuerdateien, wie Sie in den Kommentaren vermerkt haben.

Vielleicht möchten Sie auch externe Tabellen in Betracht ziehen wenn Sie diese Daten als Grundlage verwenden, um etwas anderes zu füllen, da es kein UNDO gibt Overhead beim Ersetzen der externen Datenquelle. Wahrscheinlich müssen Sie mit Ihrem DBA darüber sprechen, wie Sie das einrichten und Ihnen die erforderlichen Verzeichnisberechtigungen erteilen.