2009-04-25 12 views
0

在我的ctl文件中第一次提交之后,Sqlldr正在破坏我的主键索引。第一后,不管我在我的控制文件中的行值设置为,我得到:sqlldr在第一次提交后破坏我的主键

ORA-39776: fatal Direct Path API error loading table PE_OWNER.CLINICAL_CODE 
ORA-01502: index 'PE_OWNER.CODE_PK' or partition of such index is in unusable state 
SQL*Loader-2026: the load was aborted because SQL Loader cannot continue. 

我使用Oracle数据库和客户端11.1.0.6.0。

我知道问题不是由于重复的行,因为如果我将rows指令设置为一个巨大的值,那么在sqlldr为整个文件执行一次提交后,索引不会损坏。这给了我一个解决方法,但它仍然有点令人担忧...

感谢任何人可以给任何指导。

回答

0

我认为问题在于Oracle没有时间重建相关表上的索引,因此我将批量提交大小增加到了大于导入记录数的数字。

解决了这个问题。

1

我不会在生产表上使用SQL * Loader,但从我读过的内容中,您需要使用常规的加载。

SQL*Loader documentation

时候如果加载速度是最重要的 您使用常规路径加载

,你应该使用直接路径负载

,因为它比传统的 快路径负载。但是,某些 对直接路径负载的限制可能会要求您使用常规路径 加载。你应该在下列情况下使用常规 路径负载:

* When accessing an indexed table concurrently with the load, or when 
    applying inserts or updates to a nonindexed table concurrently with the 
    load 

要使用直接路径加载(与并行负载除外), SQL * Loader的必须独占写 访问表和排他性对任何索引的读取/写入访问。

相关问题