在构建过程中,我们运行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分钟的时间,如果可能的话,我希望避免这种情况。
依赖于其他行或表的完整性约束(例如引用约束)在直接路径加载之前被禁用,并且此后必须重新启用。如果指定了REENABLE,则SQL * Loader可以在加载结束时自动重新启用它们。重新启用约束后,将检查整个表。在指定的错误日志中报告未通过此检查的所有行。请参见直接载荷,完整性约束和触发器。
看来您必须指定REENABLE关键字以在加载后自动启用约束。
| 归档时间: |
|
| 查看次数: |
3824 次 |
| 最近记录: |