我正在構建一個SSIS軟件包以將數據從BMC Remedy數據庫(通過AR系統ODBC驅動程序)提取到我的SQL Server數據庫中的表中。請注意,處理此數據源時存在一些特殊的限制。ssis dt_text列導致軟件包掛起
我遇到的問題是我需要拉入的一列顯示爲dt_ntext(Unicode文本流)。該字段的數據類型(在TOAD中查看時)是「longvarchar」。該字段可以包含數千個字符的字符串。
只要省略這一列,我可以將所有其他字段導入到我的SQL Server表中。如果我包括這個,那麼包無限期地掛起(在BIDS和在服務器上的生產中)。我已經讓它運行了超過12個小時,並且從未取得任何進展。沒有這一列,它需要一分鐘。在BIDS中,我可以看到它掛在數據流任務的「源」步驟上,「執行階段開始」。它掛在那裏,不管目的地是什麼(相同的結果轉儲到文本文件)。
我不需要來自該字段的所有數據。前200個字符實際上就足夠了。但是,我沒有選擇更改我的源SQL語句,因爲沒有函數(即子字符串)允許(上述限制之一)。我試着在源文件上打開高級編輯器,並將該列的輸出屬性更改爲長度爲200的Unicode字符串。它不會導致錯誤,但結果是相同的(掛起)。我認爲這意味着數據仍然需要「引入」,然後截斷爲200,這對我沒有好處。
數據不是那麼大......我可以在TOAD中運行查詢,並在一分鐘內返回所有行,而不會冒煙從我的機器中流出。因此,我覺得這是某種SSIS優化問題。
我看到它的方式,我需要兩件事情之一。 1)在數據進入內存之前截斷數據(在我的SELECT語句中不這樣做),或者2)對我的包進行一些配置更改(緩衝區大小/行?),以便它可以運行在合理的數量的時間。我不知道如何實現這些。任何指導將不勝感激。
感謝, 埃裏克
是否有可能用腳本任務替換源代碼?通過代碼接近領域可能會讓您更好地控制發生的事情。 – Greenspark
如,在代碼中創建一個記錄集,然後遍歷並將每個追加到我的數據庫?這可能會奏效,但不知道效率如何。我會調查.. –
沒有太多的運氣與此。我循環遍歷記錄集,並且當我到達特定行中有問題的字段(Work_Log)時,任何嘗試讀取數據都會導致代碼掛起。例如: strTemp = Mid(dr(「Work_Log」),1,100) –