1

在我们的构建过程中,我们运行 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

rows计数故意大于数据文件中的行数,因为如果它更小,它会损坏我的 primary key

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

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

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

4

2 回答 2

5

SQL*Loader 10gR2 文档

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

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

于 2009-08-20T08:38:12.540 回答
0

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

如果它只是直接加载,则“重新启用选项”将起作用,并且约束状态将根据输入数据。

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

于 2015-08-30T20:11:07.880 回答