SSIS教程SQlServer2008R2 (5) 添加错误流重定向
第 5 課:添加錯誤流重定向
SQL Server 2008 R2
為了處理在轉換過程中可 能發生的錯誤,MicrosoftIntegration Services 使您能夠基于每個組件和每個列來決定如何處理無法轉換的數據。可以選擇忽略某些列中的失敗、重定向整個失敗的行或者只是使組件失敗。默認情況下,Integration Services 中的所有組件被配置為在發生錯誤時失敗。而使組件失敗又會導致包失敗,并使所有后續處理停止。
如 果不讓失敗導致包停止執行,一個好方法是通過配置使在轉換中發生潛在處理錯誤時這些錯誤能夠得到處理。雖然可能選擇忽略失敗以確保包成功運行,但通常更好 的做法是將失敗的行重定向到另一個處理路徑,在這里可以使數據和錯誤持久化、接受檢查并在隨后的某個時間對其進行重新處理。
在本課中,將創建在第4課:添加日志記錄中開發的包的副本。使用這個新包時,將創建一個示例數據文件的損壞版本。損壞的文件將在運行包時強制發生處理錯誤。
為了處理錯誤數據,您將添加并配置一個平面文件目標,它會將所有無法在 Lookup Currency Key 轉換中找到查找值的行寫入文件。
將錯誤數據寫入文件之前,需要包括一個使用腳本獲取錯誤說明的腳本組件。然后,將重新配置 Lookup CurrencyKey 轉換,以便將所有無法處理的數據重定向到腳本轉換中。
| 重要提示 |
| 本教程需要 AdventureWorksDW 示例數據庫。有關如何安裝和部署 AdventureWorksDW 的詳細信息,請參閱安裝 SQL Server 示例和示例數據庫的注意事項。 |
課程中的任務
本課程包含以下任務:
·????????任務 1:復制 Lesson 4 包
·????????任務 2:創建損壞的文件
·????????任務 3:添加錯誤流重定向
·????????任務 4:添加平面文件目標
·????????任務 5:測試 Lesson 5 教程包
任務 1:復制 Lesson 4 包
SQL Server 2008 R2
其他版本
此主題尚未評級評價此主題
在本任務中,您將為在第 4 課中創建的 Lesson 4.dtsx 包創建一個副本。或者,如果未完成第 4 課,則可以向項目添加本教程中附帶的已完成的第 4 課包,然后再對其進行復制以供使用。您將使用這一新副本來完成第 5 課剩余部分。
創建第 5 課包
1.???如果 Business IntelligenceDevelopment Studio 尚未打開,請單擊“開始”,依次指向“所有程序”和 Microsoft SQLServer,再單擊 BusinessIntelligence Development Studio。
2.???在“文件”菜單中,單擊“打開”,單擊“項目/解決方案”,選擇 SSIS Tutorial,再單擊“打開”,然后雙擊 SSISTutorial.sln。
3.???在解決方案資源管理器中,右鍵單擊 Lesson 4.dtsx,再單擊“復制”。
4.???在解決方案資源管理器中,右鍵單擊“SSIS 包”,再單擊“粘貼”。
默認情況下,復制的包命名為 Lesson 5.dtsx。
5.???在解決方案資源管理器中,雙擊 Lesson 5.dtsx 打開該包。
6.???右鍵單擊“控制流”選項卡背景的任意位置,再單擊“屬性”。
7.???在“屬性”窗口中,將Name 屬性更新為第 5 課。
8.???單擊 ID 屬性框,然后在列表中,單擊“<生成新 ID>”。
添加已完成的第 4 課包
1.???依次打開 Business IntelligenceDevelopment Studio 和 SSIS Tutorial 項目。
2.???在解決方案資源管理器中,右鍵單擊“SSIS 包”,再單擊“添加現有包”。
3.???在“添加現有包的副本”對話框的“包位置”中,選擇“文件系統”。
4.???單擊瀏覽 (…) 按鈕,導航到 C:\Program Files\Microsoft SQLServer\100\Samples\Integration Services\Tutorial\Creating a Simple ETLPackage\Completed Packages,選擇 Lesson 4.dtsx,再單擊“打開”。
5.???按先前過程中步驟 3 到步驟 8 所述,復制并粘貼第 4 課包。
任務 2:創建損壞的文件
SQL Server 2008 R2
其他版本
此主題尚未評級評價此主題
為闡釋如何配置和處理轉換錯誤,必須創建示例平面文件,處理該文件時將導致組件失敗。
在本任務中,將創建現有示例平面文件的一個副本。然后,用記事本打開該文件,編輯 CurrencyID 列,以確保該列在轉換查找期間無法生成匹配項。處理新文件時,查找失敗將導致Currency Key 查找轉換失敗,因此,包的剩余部分將失敗。創建了損壞的示例文件后,將運行包以查看包失敗的情況。
創建損壞的示例平面文件
1.???在記事本或其他文本編輯器中,打開Currency_VEB.txt 文件。
默 認情況下,Currency_VEB.txt 文件安裝在以下文件夾中:c:\Program Files\Microsoft SQL Server\100\Samples\IntegrationServices\Tutorial\Creating a Simple ETL Package\Sample Data。
2.???使用文本編輯器的查找和替換功能,查找 VEB 的所有實例,并替換為 BAD。
3.???在包含其他示例數據文件的同一文件夾中,將修改后的文件另存為 Currency_BAD.txt。
| 重要提示 |
| 請確保將 Currency_BAD.txt 保存到 c:\Program Files\Microsoft SQL Server\100\Samples\Integration Services\Tutorial\Creating a Simple ETL Package\Sample Data 文件夾中。 |
4.???關閉文本編輯器。
驗證是否將在運行時發生錯誤
1.???在“調試”菜單中,單擊“啟動調試”。
在數據流第三次迭代時,Lookup Currency Key 轉換將嘗試處理 Currency_BAD.txt 文件,并且該轉換將失敗。轉換失敗將導致整個包失敗。
2.???在“調試”菜單中,單擊“停止調試”。
3.???在設計圖面上,單擊“執行結果”選項卡。
4.???瀏覽日志,確認是否發生了以下未處理的錯誤:
[LookupCurrency Key[30]] Error: Row yielded no match during lookup.
| 注意 |
| 數字 30 為組件的 ID。該值在生成數據流時進行分配,可能與包中的值不同。 |
任務 3:添加錯誤流重定向
SQL Server 2008 R2
其他版本
此主題尚未評級評價此主題
如上一個任務中所示,當 Lookup Currency Key 轉換嘗試對產生錯誤的已損壞示例平面文件進行處理時,該轉換無法生成匹配。由于轉換針對錯誤輸出使用了默認設置,因此,任何錯誤都將導致該轉換失敗。當轉換失敗時,該包的其余部分也將失敗。
可以使用錯誤輸出將組件配置為將失敗的行重定向到其他處理路徑,而不是允許轉換失敗。使用單獨的錯誤處理路徑,您可以執行多項任務。例如,您可能要嘗試清除該數據,然后重新處理失敗的行。或者,您可能要將失敗的行與其他錯誤信息保存在一起,以便以后進行驗證和重新處理。
在本任務中,您將 Lookup Currency Key 轉換配置為將所有失敗的行重定向到錯誤輸出。在數據流的錯誤分支中,這些行將被寫入文件中。
默認情況下,Integration Services 錯誤輸出中的另外兩列(ErrorCode 和 ErrorColumn)只包含表示錯誤號的數值代碼以及出現錯誤的列的 ID。這些數值的使用具有限制性,而且沒有相應的錯誤說明。
若要更有效地使用錯誤輸出,請在包將失敗的行寫入文件之前,使用腳本組件來訪問 Integration ServicesAPI,然后獲取錯誤說明。
配置錯誤輸出
1.???在“工具箱”中,展開“數據流轉換”,然后將“腳本組件”拖動到“數據流”選項卡上的設計圖面。將“腳本”放置在 LookupCurrency Key 轉換的右側。
2.???在“選擇腳本組件類型”對話框中,單擊“轉換”,再單擊“確定”。
3.???單擊 LookupCurrency Key 轉換,并將紅色箭頭拖動到新添加的“腳本”轉換中,以連接這兩個組件。
紅色箭頭表示 LookupCurrency Key 轉換的錯誤輸出。通過使用紅色箭頭將轉換連接到腳本組件,您可以將所有處理錯誤重定向到腳本組件,然后,該組件會處理這些錯誤并將它們發送到目標。
4.???在“配置錯誤輸出”對話框的“錯誤”列中,選擇“重定向行”,再單擊“確定”。
5.???在“數據流”設計圖面上,在新添加的“腳本組件”中單擊“腳本組件”,再將該名稱更改為 GetError Description。
6.???雙擊 Get ErrorDescription 轉換。
7.???在“腳本轉換編輯器”對話框中的“輸入列”頁中,選擇 ErrorCode 列。
8.???在“輸入和輸出”頁中,展開“輸出 0”,單擊“輸出列”,再單擊“添加列”。
9.???在 Name 屬性中,鍵入 ErrorDescription 并將 DataType 屬性設置為 string [DT_WSTR]。
10.在“腳本”頁中,確保已將 LocaleID 屬性設置為“英語(美國)”。
11.單擊“編輯腳本”以打開MicrosoftVisual Studio Tools for Applications (VSTA)。在 Input0_ProcessInputRow 方法中,鍵入或粘貼以下代碼。
[Visual Basic]
? Row.ErrorDescription = ????Me.ComponentMetaData.GetErrorDescription(Row.ErrorCode)[Visual C#]
Row.ErrorDescription = this.ComponentMetaData.GetErrorDescription(Row.ErrorCode);已完成的子例程如以下代碼所示。
[Visual Basic]
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) ? ? Row.ErrorDescription = ????Me.ComponentMetaData.GetErrorDescription(Row.ErrorCode) ? End Sub[Visual C#]
public override void Input0_ProcessInputRow(Input0Buffer Row) ??? { ? ??????? Row.ErrorDescription = this.ComponentMetaData.GetErrorDescription(Row.ErrorCode); ? ??? }12.生成腳本以保存所做的更改,然后關閉 VSTA。
13.單擊“確定”以關閉“腳本轉換編輯器”對話框。
任務 4:添加平面文件目標
SQL Server 2008 R2
其他版本
此主題尚未評級評價此主題
Lookup Currency Key 轉換的錯誤輸出將無法執行查找操作的所有數據行重定向到腳本轉換。為了突顯相關錯誤的信息,腳本轉換將運行可獲取錯誤說明的腳本。
在 本任務中,請將有關失敗行的所有這些信息保存到分隔的文件中,以便進行后續處理。若要保存失敗的行,必須為將包含錯誤數據和平面文件目標的文本文件添加并 配置平面文件連接管理器。通過設置平面文件目標所用的平面文件連接管理器的屬性,可以指定平面文件目標如何格式化和寫入文本文件。有關詳細信息,請參閱平面文件連接管理器和平面文件目標。
添加并配置平面文件目標
1.???單擊“數據流”選項卡。
2.???在工具箱中,展開“數據流目標”,然后將“平面文件目標”拖動到數據流設計圖面上。將“平面文件目標”直接放在“獲取錯誤說明”轉換的下面。
3.???單擊“獲取錯誤說明”轉換,然后將綠色箭頭拖動到新的“平面文件目標”上。
4.???在“數據流”設計圖面上,在新添加的“平面文件目標”轉換中單擊“平面文件目標”,然后將該名稱更改為 FailedRows。
5.???右鍵單擊 FailedRows 轉換,再單擊“編輯”,然后在平面文件目標編輯器中單擊“新建”。
6.???在“平面文件格式”對話框中,確認已選中“帶分隔符”,然后單擊“確定”。
7.???在平面文件連接管理器編輯器的“連接管理器名稱”框中,鍵入Error Data。
8.???在“平面文件連接管理器編輯器”對話框中,單擊“瀏覽”,然后找到存儲文件的文件夾。
9.???在“打開”對話框中,對于“文件名”鍵入 ErrorOutput.txt,然后單擊“打開”。
10.在“平面文件連接管理器編輯器”對話框中,驗證“區域設置”框是否包含“英語(美國)”,“代碼頁”是否包含 1252 (ANSI -Latin I)。
11.在“選項”窗格中,單擊“列”。
注意,除了源數據文件中的列以外,還存在三個新列:ErrorCode、ErrorColumn 和 ErrorDescription。這三列由 Lookup Currency Key 轉換的錯誤輸出和獲取錯誤說明轉換中的腳本生成,可用于排查失敗行的原因。
12.單擊“確定”。
13.在平面文件目標編輯器中,清除“覆蓋文件中的數據”復選框。
清除該復選框可使錯誤在執行多個包的過程中持續存在。
14.在平面文件目標編輯器中,單擊“映射”來驗證所有列是否正確。您也可以選擇重命名目標中的列。
15.單擊“確定”。
任務 5:測試 Lesson 5 教程包
SQL Server 2008 R2
其他版本
此主題尚未評級評價此主題
在運行時,損壞的文件 Currency_BAD.txt 將無法在Currency Key 查找轉換中生成匹配。由于 Currency Key 查找的錯誤輸出現在已配置為將失敗的行重定向到新的失敗的行目標,因此該組件不會失敗,并且包會成功地運行。所有失敗的錯誤行都將寫入 ErrorOutput.txt。
在此任務中,您將通過運行該包對已修改的錯誤輸出配置進行測試。包成功執行后,您將查看 ErrorOutput.txt 文件的內容。
| 注意 |
| 如果不需要在 ErrorOutput.txt 文件中積累錯誤行,則應在包的運行間隔手動刪除文件內容。 |
檢查包布局
測試包之前,應當確保第 5 課包中的控制流和數據流包含下列關系圖中顯示的對象。控制流應與第 2 到第 4 課中的控制流相同。
控制流
數據流
運行第 5 課教程包
1.???在“調試”菜單中,單擊“啟動調試”。
2.???當包運行完畢后,在“調試”菜單中,單擊“停止調試”。
驗證 ErrorOutput.txt 文件的內容
·????????在 記事本或任何其他文本編輯器中,打開ErrorOutput.txt 文件。默認的列順序為:AverageRate、CurrencyID、CurrencyDate、EndOfDateRate、ErrorCode、 ErrorColumn、ErrorDescription。
請注意,文件中的所有行都包含不匹配的 CurrencyID 值 BAD、ErrorCode 值-1071607778、ErrorColumn 值 0 以及 ErrorDescription 值“在查找期間行沒有生成任何匹配項”。由于此錯誤并不是列所特有的,所以 ErrorColumn 的值設置為 0。它是已失敗的查找操作。.
?
轉載于:https://www.cnblogs.com/sxhNicole/archive/2012/11/06/SSIS_Error.html
總結
以上是生活随笔為你收集整理的SSIS教程SQlServer2008R2 (5) 添加错误流重定向的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS浮点数运算Bug的解决办法(转自百度
- 下一篇: 建行怎么预约生肖纪念币