1

甲骨文 11g

步骤1。

create table pur_order(
               po_number number primary key,
               po_date date,
               po_vendor number,
                :)

步骤 2.使用 Enterprise Manager 11g 从用户文件 podata.txt 内容中加载数据,例如:

  1 25-JUN-2011 1001
  2 26-JUN-2011 1002
  3 27-JUN-2011 1003
  1 27-JUN-2011 1001
  2 28-JUN-2011 1002

步骤 3. 加载过程成功完成。

表格内容就像上面的问题一样,因为我已经将 po_number 定义为主键,为什么 po_number 的重复值仍然可以加载?

4

1 回答 1

3

这种导入方法很可能使用 SQL*Loader 实用程序和 Direct Path Load 方法。如文档中所述,这将禁用一些完整性约束:

依赖于其他行或表的完整性约束(例如引用约束)在直接路径加载之前被禁用,并且必须在之后重新启用。如果指定了 REENABLE,SQL*Loader 可以在加载结束时自动重新启用它们。重新启用约束时,将检查整个表。任何未通过此检查的行都会在指定的错误日志中报告。请参阅直接加载、完整性约束和触发器

SQL*Loader 尝试重新启用约束但失败了,因此:

如果检测到违反 UNIQUE 约束,则索引将处于 Index Unusable 状态。请参阅处于不可用状态的索引

我很确定您会发现主键索引不可用(SELECT index_name, status FROM all_indexes WHERE table_name = 'PUR_ORDER')。

要么在没有直接路径加载的情况下加载数据文件,要么确保之后成功启用约束。

于 2012-06-20T12:14:24.037 回答