sqlldr在第一次提交后破坏了我的主键

时间:2009-04-25 02:56:15

标签: oracle sql-loader

在我的ctl文件中第一次提交后,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对整个文件进行一次提交后,索引就不会损坏。这为我提供了一种解决方法,但它仍然有点令人担忧......

感谢任何人给予的任何指导。

2 个答案:

答案 0 :(得分: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必须具有独占写入   访问表和独家   对任何索引的读/写访问权。

答案 1 :(得分:0)

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

解决了这个问题。