Oracle
 sql >> Base de données >  >> RDS >> Oracle

ORA supprimer / tronquer

La suppression d'enregistrements par lots peut être effectuée dans une boucle PL/SQL, mais est généralement considérée comme une mauvaise pratique car la suppression complète doit normalement être considérée comme une seule transaction ; et cela ne peut pas être fait à partir du fichier de contrôle SQL*Loader. Votre DBA doit dimensionner le UNDO espace pour accueillir le travail que vous devez faire.

Si vous supprimez l'intégralité du tableau, vous feriez certainement mieux de le tronquer de toute façon, soit dans le fichier de contrôle :

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

Ou en tant que truncate instruction dans SQL*Plus/SQL Developer/un autre client avant de démarrer le chargement :

truncate table import_abc;

L'inconvénient est que votre tableau apparaîtra vide pour les autres utilisateurs pendant le chargement des nouvelles lignes, mais s'il s'agit d'une zone d'importation dédiée (à partir du nom), cela n'a peut-être pas d'importance de toute façon.

Si votre UNDO est vraiment si petit, vous devrez peut-être exécuter plusieurs chargements, auquel cas - probablement évidemment - vous devez vous assurer que vous n'avez que le truncate dans le fichier de contrôle pour le premier (ou utilisez le truncate séparé déclaration), et avoir append à la place dans les fichiers de contrôle suivants, comme vous l'avez noté dans les commentaires.

Vous pouvez également envisager des tables externes si vous utilisez ces données comme base pour remplir autre chose, car il n'y a pas de UNDO surcharge lors du remplacement de la source de données externe. Vous devrez probablement parler à votre administrateur de base de données pour configurer cela et vous donner les autorisations de répertoire nécessaires.