2014-10-06 441 views
-1

目前我正在處理兩個數據庫。使用衆所周知的數據保險庫結構將信息從運營數據庫遷移到數據倉庫。但是,我似乎無法將操作數據庫中的數據加載到數據保險庫。我一再接受同樣的錯誤。SSIS轉換錯誤 - Visual Studio 2013

我已經檢查了多個標準錯誤的創造者:

  • 兩個數據庫結構的COLLATE是相同的;
  • 操作和數據倉庫之間的數據類型沒有變化;
  • 多次刪除並重寫查詢和數據庫。

錯誤輸出位於下一個代碼塊中。你們中的一個能幫我在這裏嗎?

如果需要,我可以提供Visual Studio錯誤屏幕的屏幕截圖。我嘗試過使用Google搜索並在各處搜索這個特定的問題,但我似乎沒有得到修復。

Error: 0xC0202009 at Load SATT, SATT_DELIVERY_PRICE [439]: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.

Error: 0xC0202009 at Load SATT, SATT_DISTRICT [461]: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.

Error: 0xC0209029 at Load SATT, SATT_DISTRICT [461]: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR. The "SATT_DISTRICT.Inputs[OLE DB Destination Input]" failed because error code 0xC020907B occurred, and the error row disposition on "SATT_DISTRICT.Inputs[OLE DB Destination Input]" specifies failure on error. An error occurred on the specified object of the specified component. There may be error messages posted before this with more information about the failure.

Error: 0xC0047022 at Load SATT, SSIS.Pipeline: SSIS Error Code DTS_E_PROCESSINPUTFAILED. The ProcessInput method on component "SATT_DISTRICT" (461) failed with error code 0xC0209029 while processing input "OLE DB Destination Input" (474). The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running. There may be error messages posted before this with more information about the failure.

Error: 0xC0202009 at Load SATT, SATT_EMPLOYEE [483]: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.

Error: 0xC02020C4 at Load SATT, CONSIGNMENT [2]: The attempt to add a row to the Data Flow task buffer failed with error code 0xC0047020.

Error: 0xC0209029 at Load SATT, SATT_EMPLOYEE [483]: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR. The "SATT_EMPLOYEE.Inputs[OLE DB Destination Input]" failed because error code 0xC020907B occurred, and the error row disposition on "SATT_EMPLOYEE.Inputs[OLE DB Destination Input]" specifies failure on error. An error occurred on the specified object of the specified component. There may be error messages posted before this with more information about the failure.

Error: 0xC0047038 at Load SATT, SSIS.Pipeline: SSIS Error Code DTS_E_PRIMEOUTPUTFAILED. The PrimeOutput method on CONSIGNMENT returned error code 0xC02020C4. The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing. There may be error messages posted before this with more information about the failure.

Error: 0xC0047022 at Load SATT, SSIS.Pipeline: SSIS Error Code DTS_E_PROCESSINPUTFAILED. The ProcessInput method on component "SATT_EMPLOYEE" (483) failed with error code 0xC0209029 while processing input "OLE DB Destination Input" (496). The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running. There may be error messages posted before this with more information about the failure.

Error: 0xC0202009 at Load SATT, SATT_CUSTOMER [403]: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.

Error: 0xC0209029 at Load SATT, SATT_CUSTOMER [403]: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR. The "SATT_CUSTOMER.Inputs[OLE DB Destination Input]" failed because error code 0xC020907B occurred, and the error row disposition on "SATT_CUSTOMER.Inputs[OLE DB Destination Input]" specifies failure on error. An error occurred on the specified object of the specified component. There may be error messages posted before this with more information about the failure.

Error: 0xC0047022 at Load SATT, SSIS.Pipeline: SSIS Error Code DTS_E_PROCESSINPUTFAILED. The ProcessInput method on component "SATT_CUSTOMER" (403) failed with error code 0xC0209029 while processing input "OLE DB Destination Input" (416). The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running. There may be error messages posted before this with more information about the failure.

Error: 0xC0209029 at Load SATT, SATT_DELIVERY_PRICE [439]: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR. The "SATT_DELIVERY_PRICE.Inputs[OLE DB Destination Input]" failed because error code 0xC020907B occurred, and the error row disposition on "SATT_DELIVERY_PRICE.Inputs[OLE DB Destination Input]" specifies failure on error. An error occurred on the specified object of the specified component. There may be error messages posted before this with more information about the failure.

Error: 0xC0047022 at Load SATT, SSIS.Pipeline: SSIS Error Code DTS_E_PROCESSINPUTFAILED. The ProcessInput method on component "SATT_DELIVERY_PRICE" (439) failed with error code 0xC0209029 while processing input "OLE DB Destination Input" (452). The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running. There may be error messages posted before this with more information about the failure.

+0

您能僅顯示實際的錯誤信息嗎? – SchmitzIT 2014-10-06 17:28:57

+6

你的錯誤是你試圖向主鍵中插入一個空值。不能相信我真的花時間來解析這個。 – Zane 2014-10-06 17:30:10

+1

@贊恩歐普也有重複值的關鍵,顯然 – Lamak 2014-10-06 17:32:11

回答

0

這就是爲什麼沒有替代理解您的數據的含義和錯誤代碼的含義。您正試圖將數據放入行中沒有數據的列中。這可能是一個數據庫設計的問題,第一個數據庫允許使用空值,而您插入的數據庫不會,或者它可能是錯誤的查詢,通過錯誤的連接或條件不正確的數據傳遞到其他數據庫或者它可能是一個不正確的SSIS封裝設計問題,導致數據無法根據業務規則應該正確填充。我們無法確定 - 只有在系統中擁有專業知識的人才能做到。

我可以給你一個我最近遇到的例子,雖然這種事情發生在哪裏。幾個月(以及多個客戶端)正常運行的pacakage突然不適用於一個客戶端,錯誤是PK爲空。這完全沒有意義,因爲PK是在一個表中生成的,並在先前的步驟中傳遞給兩個相關的登臺表,並且它是登臺表中的必需字段。問題出現了,因爲其中一個表沒有記錄來匹配另一個表中的數據,而它所失敗的表的數據集從沒有匹配記錄的表中取得了鍵而沒有匹配記錄的鍵。在這種情況下,SSIS包存在錯誤並需要修復。

發生這種情況的另一種方法是,數據不是在orginating表中的PK,而是在允許空值的字段中。在這種情況下,您需要修復數據,並且應該修復SSIS包以將該類數據發送到異常表。無論如何,你應該一直這樣做。

將失敗的數據發送到異常表時,對異常進行故障排除要容易得多。這也意味着如果您的業務規則允許,您可以處理其他數據。但是,請小心將數據發送到異常表,並且不要試圖解決這些異常。如果你有一個例外表,有人應該檢查它,並至少每週嘗試修復這些問題。

或者您可能需要從需要調整的查詢中提取數據。假設您有一種情況,即所有類型的銷售總是包含客戶ID。然後,應用程序進行了調整,讓它成爲內部銷售,並且愚蠢地決定內部客戶不必擁有客戶ID。現在突然間,你總是填滿的一個領域偶爾是空的。應用程序開發人員會重新考慮其他事情,例如可能受其決策影響的數據服務和報告,並且通常不會通知在進行更改時對這些事情采取行動的BI開發人員。因此,尋找基礎數據模型中可能發生的變化總是可以考慮的。在這種情況下,數據倉庫可能不需要內部訂單,或者如果它們可能是一個假的cuastomer id,如-1可以在數據流中附加,如果底層模型不能更改。

然而,我看到你的軟件包所面臨的最大問題是你顯然不明白錯誤的含義(甚至不知道如何從一堆信息中拉出來)或者你已經知道了所有這些。您需要開始查看您收到的錯誤,並通過Google瞭解它們的含義。然後,您需要將這個含義應用於您的特定數據庫和SSIS包的設計方式。

你需要開發一個更好的方式來處理troubleshoot,所以你需要用日誌和異常表來設置你的SSIS插件,以及當它發生時你需要能夠捕捉問題的東西。

有沒有這樣的事情,作爲一個SSIS包將完全100%的時間工作。數據模型發生了變化,人們開始輸入的數據與以往不同,一個不好的數據輸入人員可以通過輸入一個沒有人考慮過的值來搞砸SSIS工作。或者更糟糕的是,數據可能會出錯,並繼續盲目地繼續到下一個位置。

通過過程發送的數據的錯誤處理和陷阱是每個SSIS包都應該有的,因爲您需要它。假設所有東西都保持不變,你無法想象設計SSIS包。你需要知道它應該會失敗,它會拒絕不良數據,並且它會識別何時發生意外的數據。你需要明白事情會隨着時間而改變,一個SSIS包需要能夠在他們這樣做時發出一個煙霧信號。

我有包失敗,因爲導入文件中有兩個記錄。當我期望一個整數時,我有發送數據到異常表的數據包,並且我得到了文本,並且一直處於打開狀態。我的大部分軟件包在修復數據方面花費了更多的工作,將不可修復的數據發送到異常並處理錯誤,而不是實際移動數據。這就是爲什麼我從來沒有設計一個沒有登臺表的軟件包的原因之一。在到達最終目的地之前最好失敗,而不是必須回滾一堆生產表。如果你不做這些事情,你需要開始。

+0

感謝您的示例,並花時間回答我的問題。我會盡力實施你的提示並記住SSIS包的未來發展。 – User992992 2014-10-06 19:22:16