在构建过程中,我们运行sqlldr以使用一些示例数据填充数据库。在sqlldr接触的每个表上,在sqlldr运行后禁用外键。
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分钟,如果可能的话我想避免这种情况。
答案 0 :(得分:4)
来自SQL*Loader 10gR2 documentation:
依赖的完整性约束 其他行或表,例如 参照约束,被禁用 在直接路径加载之前必须 之后重新开始。如果可以 如果指定,SQL * Loader可以重新启用 他们自动在结束时 加载。当约束是 重新启用,整个表是 检查。任何未通过此检查的行 在指定的错误中报告 登录。请参阅Direct Loads, Integrity Constraints, and Triggers。
似乎您必须指定REENABLE
关键字才能在加载后自动启用约束。
答案 1 :(得分:0)
在SQL Loader中,我们还有索引维护选项和与约束相关的选项。
如果它只是直接加载那么'重新启用选项'将工作,约束状态将根据输入数据。
如果是直接和并行加载,那么我认为你必须在加载后启用。