Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

ORA excluir / truncar


A exclusão de registros em lotes pode ser feita em um loop PL/SQL, mas geralmente é considerada uma prática ruim, pois a exclusão inteira normalmente deve ser considerada como uma única transação; e isso não pode ser feito no arquivo de controle do SQL*Loader. Seu DBA deve dimensionar o UNDO espaço para acomodar o trabalho que você precisa fazer.

Se você estiver excluindo a tabela inteira, quase certamente será melhor truncar de qualquer maneira, no arquivo de controle :
options(skip=1,load=250000,errors=0,ROWS=30000,BINDSIZE=10485760)
load data
infile 'G:1.csv' "str '^_^'"
truncate
into table IMPORT_ABC
...

Ou como um truncate separado instrução no SQL*Plus/SQL Developer/algum outro cliente antes de iniciar o carregamento:
truncate table import_abc;

A desvantagem é que sua tabela aparecerá vazia para outros usuários enquanto as novas linhas estiverem sendo carregadas, mas se for uma área de importação dedicada (adivinhando pelo nome), isso pode não importar de qualquer maneira.

Se o seu UNDO é realmente tão pequeno, então você pode ter que executar várias cargas, nesse caso - provavelmente obviamente - você precisa ter certeza de ter apenas o truncate no arquivo de controle para o primeiro (ou use o truncate separado declaração) e anexar em vez disso, em arquivos de controle subsequentes, conforme você observou nos comentários.

Você também pode considerar tabelas externas se você estiver usando esses dados como base para preencher outra coisa, pois não há UNDO sobrecarga na substituição da fonte de dados externa. Você provavelmente precisará conversar com seu DBA sobre como configurar isso e fornecer as permissões de diretório necessárias.