Изтриването на записи на партиди може да се извърши в PL/SQL цикъл, но обикновено се счита за лоша практика, тъй като цялото изтриване обикновено трябва да се разглежда като една транзакция; и това не може да се направи от контролния файл на SQL*Loader. Вашият DBA трябва да оразмери UNDO
място за работата, която трябва да свършите.
Ако изтривате цялата таблица, почти със сигурност ще бъде по-добре да отрежете така или иначе в контролния файл :
options(skip=1,load=250000,errors=0,ROWS=30000,BINDSIZE=10485760)
load data
infile 'G:1.csv' "str '^_^'"
truncate
into table IMPORT_ABC
...
Или като отделен truncate
оператор в SQL*Plus/SQL Developer/някой друг клиент, преди да започнете зареждането:
truncate table import_abc;
Недостатъкът е, че вашата таблица ще изглежда празна за другите потребители, докато се зареждат новите редове, но ако това е специална област за импортиране (предполага се от името), това така или иначе може да няма значение.
Ако вашият UNDO
наистина е толкова малък, тогава може да се наложи да стартирате множество зареждания, в който случай - вероятно очевидно - трябва да сте сигурни, че имате само truncate
в контролния файл за първия (или използвайте отделния truncate
декларация) и имат добавянекод>
вместо в следващите контролни файлове, както отбелязахте в коментарите.
Може също да обмислите външни таблици
ако използвате тези данни като база за попълване на нещо друго, тъй като няма UNDO
режийни разходи при подмяна на външния източник на данни. Вероятно ще трябва да говорите с вашия DBA относно настройката и предоставянето на необходимите разрешения за директория.