Menghapus record dalam batch dapat dilakukan dalam PL/SQL loop, tetapi umumnya dianggap praktik yang buruk karena seluruh penghapusan biasanya dianggap sebagai satu transaksi; dan itu tidak dapat dilakukan dari dalam file kontrol SQL*Loader. DBA Anda harus mengukur UNDO
ruang untuk mengakomodasi pekerjaan yang perlu Anda lakukan.
Jika Anda menghapus seluruh tabel, Anda hampir pasti akan lebih baik memotongnya, baik di file kontrol :
options(skip=1,load=250000,errors=0,ROWS=30000,BINDSIZE=10485760)
load data
infile 'G:1.csv' "str '^_^'"
truncate
into table IMPORT_ABC
...
Atau sebagai truncate
yang terpisah
pernyataan di SQL*Plus/SQL Developer/beberapa klien lain sebelum Anda memulai pemuatan:
truncate table import_abc;
Kerugiannya adalah tabel Anda akan tampak kosong bagi pengguna lain saat baris baru sedang dimuat, tetapi jika itu adalah area impor khusus (menebak dari namanya) itu mungkin tidak masalah.
Jika UNDO
benar-benar kecil maka Anda mungkin harus menjalankan banyak beban, dalam hal ini - mungkin jelas - Anda perlu memastikan bahwa Anda hanya memiliki truncate
di file kontrol untuk yang pertama (atau gunakan truncate
yang terpisah pernyataan), dan memiliki append
sebagai gantinya di file kontrol berikutnya seperti yang Anda catat di komentar.
Anda mungkin juga ingin mempertimbangkan tabel eksternal
jika Anda menggunakan data ini sebagai basis untuk mengisi data lain, karena tidak ada UNDO
overhead untuk mengganti sumber data eksternal. Anda mungkin perlu berbicara dengan DBA Anda tentang pengaturannya dan memberi Anda izin direktori yang diperlukan.