我在表中插入数百万条记录,这样的操作需要数小时或者一天。 2小时后,通过我的电脑连接断开,所以我想从头开始重复插入
我的问题
哪个更快?截断表并再次重复,或创建主键并继续,但是由于在过去2小时内插入的每条记录“违反了唯一约束”,将引发错误。
答案 0 :(得分:1)
截断表格(如果完全刷新)是最佳选择。如果您使用Oracle的SKIP
实用程序,还有SQL*Loader
参数。让我解释一下吧!
还尝试使用DIRECT
加载选项使用SQL * Loader加载表。这意味着通过加载到数据块而不是传统的INSERT
语句来加载表。
通过这种加载,您可以启用UNRECOVERABLE
,这意味着没有/更少的重做日志被写入,因此加载速度非常快<70%比传统 {{1} }。
但是,此加载的缺点是,在加载开始之前,此表上的所有索引(INSERT
约束除外)将被设置为 UNUSABLE ,并且将加载数据。在 SUCCESSFUL 完成时,NULL
尝试通过重建来重新启用索引。因此,如果我的任何原因,加载已中断,错误消息将被正确记录,索引将保留 UNUSABLE 。
更多详情:请找Here
(SQL*Loader
/ DIRECT
正在加载)
此外,使用CONVENTIONAL
,您可以使用SQL*Loader
加载加载,这意味着Conventional
将使用该文件生成INSERT块,并对其进行处理。在这种类型的装载中,所有INDEXES都将保留原样,并且表格保持不受伤害。
如果发生任何错误,SQL*Loader
将记录SQL*Loader
参数,这意味着,如果您指定该号码,则下次运行时,表格将从文件的该点加载。 / p>
有关SKIP
的更多详情:Here
答案 1 :(得分:0)
不确定如何加载表,但这是一个经典的情况,你应该使用Oracle的外部表。