0

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

感谢任何人都可以提供的任何指导。

4

2 回答 2

1

我在生产表上使用的 SQL*Loader 不多,但根据我的阅读,您需要使用常规加载。

来自SQL*Loader 文档

何时使用常规路径负载

如果加载速度对您来说最重要,您应该使用直接路径加载,因为它比传统路径加载更快。但是,对直接路径加载的某些限制可能要求您使用常规路径加载。在以下情况下,您应该使用常规路径加载:

* 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 必须具有对表的独占写入访问权和对任何索引的独占读/写访问权。

于 2009-04-27T01:54:54.427 回答
0

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

这解决了这个问题。

于 2009-07-07T14:06:19.427 回答