运行sqlldr后为什么我的外键被禁用?

时间:2009-08-19 20:24:09

标签: oracle sql-loader

在构建过程中,我们运行sqlldr以使用一些示例数据填充数据库。在sqlldr接触的每个表上,在sqlldr运行后禁用外键。

根据this Ask Tom posting

  

sqlldr只会禁用约束   与其他表有关(例如:   外键)不是主键。

     

SQLLDR只会重新启用   IT禁用的约束,而不是   你自己做的。

我认为这意味着应该启用我的外键。

我们所有的sqlldr控制文件都与此类似:

options (direct=true, rows=20000)
load data
infile "clinical_code.txt"
append
into table clinical_code
fields terminated by "|"
trailing nullcols

rows计数有意大于数据文件中的行数,因为如果它更小,it corrupted my primary key

为什么sqlldr没有像文档那样重新启用我的外键?

我很好写SQL以在必要时重新启用索引。我想知道为什么会这样。

使用传统的加载路径是一个不错的选择,但它会为我们的构建过程增加2分钟,如果可能的话我想避免这种情况。

2 个答案:

答案 0 :(得分:4)

来自SQL*Loader 10gR2 documentation

  

依赖的完整性约束   其他行或表,例如   参照约束,被禁用   在直接路径加载之前必须   之后重新开始。如果可以   如果指定,SQL * Loader可以重新启用   他们自动在结束时   加载。当约束是   重新启用,整个表是   检查。任何未通过此检查的行   在指定的错误中报告   登录。请参阅Direct Loads, Integrity Constraints, and Triggers

似乎您必须指定REENABLE关键字才能在加载后自动启用约束。

答案 1 :(得分:0)

在SQL Loader中,我们还有索引维护选项和与约束相关的选项。

如果它只是直接加载那么'重新启用选项'将工作,约束状态将根据输入数据。

如果是直接和并行加载,那么我认为你必须在加载后启用。