在我的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对整个文件进行一次提交后,索引就不会损坏。这为我提供了一种解决方法,但它仍然有点令人担忧......
感谢任何人给予的任何指导。
答案 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没有时间重建有问题的表上的索引,因此我将批量提交大小增加到大于我导入的记录数的数量。
解决了这个问题。