これにより、次のメッセージが表示されるので、今回は、前回の列情報を維持するために[は い]ボタンをクリックします。
3. 続いて、次のように「列」ページをクリックして、[1 ~ 3 行のプレビュー]で転送元とな るデータを確認します。
1 列目の「列 0」列には、文字データが含まれていることに注目します。
4. 続いて、[詳細設定]ページをクリックして開き、前の Step の手順 8 で設定したように「列 0」列の[DataType]が「4 バイト符号付き整数」(SQL Server の int 型に相当)になって いることを確認します。確認後、[OK]ボタンをクリックして、[フラット フゔル接続マネ ージャ エデゖタ]ダゕログを閉じます。
1
1
2
1 2
3
4
データ転送の実行
5. ここまでの設定を確認するために、[デバッグ]メニューから[デバッグ開始]をクリックし て、パッケージを実行します。
今度は、[フラット フゔル ソース]が赤色に変わって、データ転送が失敗していることを 確認できます。
6. [デバッグ]メニューから[デバッグの停止]をクリックして、デバッグを終了します。
7. 続いて、[実行結果]タブをクリックして、実行結果を確認します。
「データ変換が失敗しました。列 "列 0" の~」というエラーが発生して、MISS.txt の「列 0」でのデータ型の変換エラーによって、パッケージ実行が失敗したことを確認できます。こ れは、列 0(1 列目)のデータ型を int 型に設定しているにも関わらず、文字データが含ま れているために発生しています。
1
2
↓
MISS.txt の列0列で データ変換エラー
タスクの失敗 1
2
3
8. 次に、Windows エクスプローラから、C:\logging1.txt フゔルを開いて、記録されたロ グを確認します。
: (中略)
今 回 は デ ー タ 転 送 が 失 敗 し た の で 、 エ ラ ー の 発 生 (OnError) と タ ス ク の 失 敗
(OnTaskFailed)、が記録されることを確認できます。
このように、ログ記録を設定しておくと、パッケージの実行エラーを記録することができるの で、大変便利です。
9. 最後に、SSISstep5 プロジェクトを保存しておきます。このプロジェクトは、次の Step で も引き続き使用します。
列0でデータ変換エラー
データ フロー タスクが失敗
ST S T EP E P 4 4. . ベ ベン ント ト ハン ハ ンド ドラ ラ
この STEP では、パッケージの実行ベントの内容に応じて、タスクを実行する方法を 説明します。
この STEP では、次のことを学習します。
ベント ハンドラの設定
エラー発生時のスクリプト実行
4.1 イベント ハンドラの利用
ベント ハンドラを利用するとパッケージ実行時のベント(エラーや警告など)の内容に応じて、タスク を実行できるようになります。この Step では、パッケージのエラー発生時に、スクリプト タスクを実行 するようにしてみましょう。
SSISstep5 プロジェクトを開く
1. まずは、Business Intelligence Development Studio を起動し、次のように[フゔル]メ ニューの[開く]から[プロジェクト/ソリューション]をクリックして、「C:\SSISstep5」
フォルダの「SSISstep5.sln]フゔルを選択し、Step3 で作成した「SSISstep5」プロジ ェクトを開きます。
イベント ハンドラの設定
2. ベント ハンドラを設定するには、まずは[イベント ハンドラ]タブをクリックします。
1
2
3
1
3. 今回は、エラー発生時に実行するタスクを設定するために、[ベント ハンドラ]で「OnError」
を選択して、[実行可能ファイル 'Package' の 'OnError' イベントハンドラを作成するに はここをクリックします]をクリックします。
4. 次に、エラー発生時に実行するタスクを設定していきます。今回は、[ツール ボックス]から
[スクリプト タスク]をドラッグ ゕンド ドロップして、配置します。
5. 配置した[スクリプト タスク]をダブル クリックします。
1
2
1
6. [スクリプト タスク エデゖタ]ダゕログが表示されたら、今回は Visual Basic でスクリ プトを記述するために[ScriptLanguage]で「Microsoft Visual Basic 2008」を選択し ます。
7. 続いて、[ReadOnlyVariables]で[...]ボタンをクリックして、[変数の選択]ダゕログ を 表 示 し 、 シ ス テ ム 変 数 の 一 覧 か ら 「System::ErrorCode」( エ ラ ー 番 号 ) と
「System::ErrorDescription」(エラーの説明)をチェックします。
ダブル クリック 1
1
8. [スクリプト タスク エデゖタ]へ戻ったら、[スクリプトの編集]ボタンをクリックします。
9. [スクリプト エデゖタ]では、[プロジェクト エクスプローラ]で[ScriptMain.vb]を開 き、「public Sub Main( )」内のコードを、次のように入力します(変数名の大文字と小文 字に注意してください)。
MessageBox.Show(Dts.Variables("System::ErrorCode").Value.ToString() _
& ":" & Dts.Variables("ErrorDescription").Value.ToString())
1
2
3
1
このコードにより、エラー番号とエラーの説明をメッセージ ボックスで表示できるようにな ります。
入力後、保存してスクリプト エデゖタを閉じます。
10. [スクリプト タスク エデゖタ]ダゕログへ戻ったら、[OK]ボタンをクリックして閉じま す。
1
入力 3
4
2
1
パッケージを実行して確認
11. [デバッグ]メニューから[デバッグの開始]をクリックしてパッケージを実行します。
配置されている[スクリプト タスク]が黄色に変わり、エラー番号とエラーの説明がメッセ ージ ボックスで表示されることを確認できます。
このメッセージ ボックスは、エラー(OnError ベント)が発生した数分表示されるので、
その分[OK]ボタンをクリックします。
12. すべてのメッセージ ボックスが表示され、[スクリプト タスク]が緑色に変わったら、[デバ ッグ]メニューから[デバッグの停止]をクリックして、デバッグを終了します。
このように、ベント ハンドラを利用すると、パッケージのエラー発生時などに応じて、タ 1
↓
Note: エラー発生時にメール送信(メール送信タスク)
OnError ベント ハンドラや OnTaskFailed(タスクの失敗)ベント ハンドラでは、メール送信タスクを利用 すると、エラー発生時にメールを送信できるようになるので便利です。
メール送信タスクでは、次のように SMTP サーバーの名前と送信元/先のメール ゕドレス、件名を設定するだけ でメールを送信することができます。
メールの本文として ErrorCode や ErrorDescription を送信するには、次のように[式]ページで
[MessageSource]プロパテゖを設定するようにします。
1
SMTP サーバーの名 前またはゕドレス 2
3
v
2 ↓
↓
ErrorCodeをDT_STR関数で文字列へキャス トして、ErrorDescriptionと文字列連結 4
1
エラー発生時の エラー メッセージを メールで受信できる
ようになる
ST S TE EP P 5 5. . エラ エ ラー ー コン コ ン ポー ポ ーネ ネ ント ン トの の 利用 利 用
この STEP では、データ転送時にエラーが発生した場合の対処方法について説明しま す。
この STEP では、次のことを学習します。
エラー発生時の動作
エラーを無視して実行する方法
エラー情報をフゔルへ書き込む方法
スクリプト コンポーネント(C#)によるエラー メッセージの取得