2009-08-19 62 views
1

在我們的構建過程中,我們運行sqlldr以使用一些示例數據填充我們的數據庫。在sqlldr觸及的每個表上,在sqlldr運行後外鍵都被禁用。爲什麼我的外鍵在運行sqlldr之後被禁用?

根據this Ask Tom posting

SQLLDR將僅禁用涉及到其它表約束 (例如: 外鍵)NOT的主鍵。

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分鐘,如果可能,我想避免這種情況。

回答

4

SQL*Loader 10gR2 documentation

依賴其它 行或表

完整性約束,如 參照約束,是直接路徑加載之前禁用 並且必須 在之後重新啓用。如果指定了REENABLE ,則SQL * Loader可以在 加載結束時自動重新啓用它們 。當約束爲 重新啓用時,整個表被檢查爲 。在指定的錯誤 日誌中報告任何未通過此項檢查的行 。見Direct Loads, Integrity Constraints, and Triggers

看起來您必須指定REENABLE關鍵字才能在加載後自動啓用約束。

+0

你的答案已經死了。謝謝。不知道爲什麼我不能谷歌這個答案。 – 2009-08-20 14:51:05

0

在SQL加載程序中,我們也有索引維護選項和與約束相關的選項。

如果只是直接加載,然後「重新啓用選項」將工作和約束狀態將是按照輸入數據。

如果它的直接和並行負載,那麼我認爲你必須在加載後啓用。

相關問題