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

Jos*_*off 1 oracle sql-loader

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

根据此Ask Tom帖子

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
Run Code Online (Sandbox Code Playgroud)

rows计数有意大于数据文件中的行数,因为如果较小,它将破坏我的主键

为什么sqlldr不像文档所示暗示那样重新启用我的外键?

如果需要,我可以编写SQL重新启用索引。我想知道为什么会这样。

使用传统的加载路径是一种不错的选择,但是这将使我们的构建过程增加2分钟的时间,如果可能的话,我希望避免这种情况。

Vin*_*rat 5

SQL * Loader 10gR2文档中

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

看来您必须指定REENABLE关键字以在加载后自动启用约束。