2016-03-08 63 views
1

我有一個SSIS包從Oracle表中讀取數據,並把它變成一個Netezza公司表。由於某些原因,SSIS無法讀取特定的列值(記錄的2%),如屏幕截圖所示。SSIS未能獲得列值,並將其設置爲NULL

enter image description here

Oracle中的列類型是NUMBER(3)在我的Netezza表是SMALLINT。任何想法爲什麼這可能會發生?

錯誤的列不要麼給我任何信息。

我迄今爲止嘗試:

  1. 我試着去使用這個MSDN article更好的錯誤描述。從默認的1000
  2. 減少批量大小,以100

預先感謝任何幫助。

編輯

我讓它失敗,這裏是我得到的錯誤消息。我在我的筆記本電腦上有4 GB內存。這可能是一個問題嗎?發生開放式數據庫連接(ODBC)錯誤:

[DESTINATION_TABLE 2]錯誤。 SQLExecute在插入行時返回錯誤35244

[DESTINATION_TABLE 2]錯誤:發生開放式數據庫連接(ODBC)錯誤。狀態:'HY008'。本地錯誤代碼:51.操作取消

[DESTINATION_TABLE 2]錯誤:開放式數據庫連接(ODBC)發生錯誤。狀態:'01000'。本機錯誤代碼:1.無法寫入nzlog /錯誤文件

[DESTINATION_TABLE 2]錯誤:發生開放式數據庫連接(ODBC)錯誤。狀態:'01000'。本機錯誤代碼:1.無法寫入nzlog /錯誤文件

[DESTINATION_TABLE 2]錯誤:發生開放式數據庫連接(ODBC)錯誤。狀態:'HY000'。本機錯誤代碼:46.錯誤:外部表:錯誤輸入行的數量達到最大錯誤限制

[SSIS.Pipeline]錯誤:SSIS錯誤代碼DTS_E_PROCESSINPUTFAILED。處理輸入「ODBC目標輸入」(13)時,組件「DESTINATION_TABLE」(2)上的ProcessInput方法失敗,錯誤代碼爲0x80004005。標識的組件從ProcessInput方法返回錯誤。該錯誤是特定於組件的,但錯誤是致命的,並且會導致數據流任務停止運行。在此之前可能會發布錯誤消息,提供有關失敗的更多信息。

[SOURCE_TABLE [63]]錯誤:未能將行添加到輸出緩衝區。發生開放式數據庫連接(ODBC)錯誤:

[SOURCE_TABLE [63]]錯誤。

[SSIS.Pipeline]錯誤:SSIS錯誤代碼DTS_E_PRIMEOUTPUTFAILED。SOURCE_TABLE上的PrimeOutput方法返回錯誤代碼0x80004005。當管道引擎調用PrimeOutput()時,組件返回失敗代碼。失敗代碼的含義由組件定義,但錯誤是致命的,並且管道停止執行。在此之前可能會發布錯誤消息,提供有關失敗的更多信息。

+1

您是否嘗試過從oracle提取到平面文件,而不是使用NZ(用於故障排除)。需要弄清楚它是否是導致問題的提取或負載... –

+1

您應該嘗試設置Netezza目標的日誌目錄屬性。您至少可以看到nzlog/nzbad輸出文件,以便從目標位置獲得更多信息。 –

+0

@NWest - 這是一個很好的建議。我這樣做,也必須使用MaxBufferSize屬性,並將提交大小從1000更改爲500.它工作但花了2小時(停機時間),但花了2小時才能加載646 MB的數據。什麼解決了這個奇怪的問題是使用OLEDB驅動程序的Netezza和做Mehtat_90說。 – KalC

回答

1

您是否在數據流中嘗試數據轉換?嘗試將數字轉換爲(DT_I2)在SSIS中,然後它應該工作我相信

+0

這解決了問題的一部分。爲什麼96%的行沒有這個奇怪的問題,這仍然是個謎。一勞永逸解決我的問題的方法就是像你說的那樣使用DT_12來代替Netezza的OleDB驅動程序。我能夠使用Oracle-> Flat File-> Netezza(仍然使用ODBC)獲得100%的行,但花了2小時來加載646 MB的數據。使用OleDB,即使在白天也不到2分鐘。 – KalC

+1

我相信這個問題可以通過將AccessMode屬性設置爲使用FastLoad的OpenRowset或使用FastLoad From Variable的OpenRowset來解決。 –

相關問題