sql >> Base de Datos >  >> RDS >> Oracle

ORA borrar/truncar

La eliminación de registros en lotes se puede realizar en un bucle PL/SQL, pero generalmente se considera una mala práctica, ya que la eliminación completa normalmente se debe considerar como una sola transacción; y eso no se puede hacer desde el archivo de control de SQL*Loader. Su DBA debe dimensionar el UNDO espacio para acomodar el trabajo que necesita hacer.

Si está eliminando toda la tabla, es casi seguro que será mejor truncarla de todos modos, ya sea en el archivo de control :

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

O como truncate por separado declaración en SQL*Plus/SQL Developer/algún otro cliente antes de iniciar la carga:

truncate table import_abc;

La desventaja es que su tabla aparecerá vacía para otros usuarios mientras se cargan las nuevas filas, pero si se trata de un área de importación dedicada (adivinar por el nombre) eso puede no importar de todos modos.

Si su UNDO es realmente tan pequeño, es posible que deba ejecutar varias cargas, en cuyo caso, probablemente obviamente, debe asegurarse de que solo tiene el truncate en el archivo de control para el primero (o use el truncate separado instrucción) y tener append en su lugar, en los archivos de control posteriores como anotó en los comentarios.

También puede considerar tablas externas si está utilizando estos datos como base para completar algo más, ya que no hay UNDO gastos generales en la sustitución de la fuente de datos externa. Probablemente deba hablar con su DBA para configurarlo y otorgarle los permisos de directorio necesarios.