Reputation: 7377
I am inserting in a table millions of records , such operation will need hours or maybe a day. After 2 hours the connection through my pc was disconnected, so I want to repeat the insert from the start.
My Question
which is faster ? truncate the table and repeat it again , or creating a primary key and continue, however an error will be raised because of 'unique constraint violated' for every record that was inserted in the last 2 hours.
Upvotes: 0
Views: 1274
Reputation: 4538
Not sure how you are loading your table but this is a classic situation where you should use external table of Oracle.
Upvotes: 0
Reputation: 17920
Truncating the table (If full refresh)is the best option Hands down. There's also SKIP
parameter, if you use Oracle's SQL*Loader
utility. Let me explain to some extent!
Also try loading the table with SQL*Loader using DIRECT
load option. Which means loading the table by loading into the data blocks, instead of conventional INSERT
statements.
By this kind of loading, you can enable UNRECOVERABLE
, which means no/less redo log written, so the loading is very fast >70% than conventional INSERT
.
But, the downside of this loading is, ALL indexes on this table, except NULL
constraints will be made UNUSABLE, before the start of loading, and the data will be loaded. And on SUCCESSFUL completion, SQL*Loader
tries to re-enable the index, by rebuilding it. So, if in case my any reason, the loading had interrupted, the error messages will be logged properly, and the index would be left UNUSABLE.
More Details on : Please find Here
(DIRECT
/CONVENTIONAL
Loading)
Also, using SQL*Loader
, you can load using Conventional
loading, which means SQL*Loader
would generate the chunk of INSERTs using the file , and process it. In this type of loading, all the INDEXES will be left as such, and the table remains unharmed.
If at all any error happens, SQL*Loader
will log a SKIP
parameter, which means , by next run, if you specify that number, the table will loaded from that point of the file.
More Details on SQL*Loader
: Here
Upvotes: 1