2011-08-24 118 views
0

我想知道我的文件是否在數據庫中加載完成。sqlldr返回碼 - ex_warn

如果您檢查返回碼here,您可以看到1和3是失敗的。

EX_SUCC 0 
EX_FAIL 1 
EX_WARN 2 
EX_FTL 3 

EX_WARN(返回代碼2)包括此情況下:

All or some rows rejected EX_WARN 

All or some rows discarded EX_WARN 

Discontinued load EX_WARN 

現在,在第一和第二是可管理的。

對於第三我必須在文檔中搜索。 如果您閱讀this,您可以看到「停產的負載」包括「致命錯誤」,「CTRL-C」和「空間錯誤」。 在這種情況下,我可能會得到沒有記錄或某些記錄被拒絕,EX_WARN返回代碼以及數據庫中未完成加載的文件。

如果沒有記錄被拒絕很簡單:這是一個不連續的負載。我必須以錯誤退出。 但是當我有一些記錄被拒絕時,我不確定我的文件是否完全加載到數據庫中。 (有些行被拒絕是我可以接受的。) 對不對?

如果是的話,有什麼解決辦法? 如何知道整個表是否已加載到數據庫中?

+1

這裏有問題嗎?似乎更像是一場咆哮。 – tvanfosson

+0

我發佈這個,因爲我錯了一個很好的機會。可能我誤解了一些東西。 –

+0

「如果SQL * Loader返回零以外的任何退出代碼,則應該查閱系統日誌文件和SQL * Loader日誌文件以獲取更詳細的診斷信息。」 – tvanfosson

回答

2

您可能會遇到這樣的情況:SQL Loader插入(並提交)了某些數據文件的行但未能到達該文件的末尾(即在失敗點之後可能有更多的記錄會以其他方式成功)。

我想通過SQL Loader選擇外部表,使用INSERT INTO dest_table ... SELECT * FROM external_table。這將是一個原子操作,如果回滾沒有足夠的撤銷(因爲您沒有使用中間提交),它會失敗(通常很小)。

我還會盡量減少外部表/ SQL Loader層中拒絕的可能性,方法是將所有內容視爲通用文本,直到將其加載到數據庫中。然後我會應用該結構並使用DML錯誤日誌記錄來處理任何不規則的事情。這樣,您可以清楚地訪問被拒絕的數據以及數據庫中拒絕的原因。

0

看起來我是對的。 我算不算很好地解決了亞歷克斯·普爾評論,加里的解決方案(也recomended由湯姆·凱特),我發現在ecuation另一個伎倆我coleagues:

要看跌期權(行= 100000000) - 超過輸入數據可以有 - 和常規負載。 (我們將只有一個提交或沒有) 有了這個,我們知道,如果是加載的東西,加載的一切。