2013年3月17日日曜日

◆ログ記録

実習を始める前に
転送先となるデータベースの作成

この Step では、SSIS デザイナーを使用して、テキスト データを SQL Server 内へ取り込んでいくので、取り込み先(転送先)となる空のデータベースを作成しておきます。次のようにManagement Studio で[データベース]フォルダーを右クリックして、[新しいデータベース]をクリックし、「ssisdb3」という名前のデータベースを作成します。

image

インポートするファイル

インポートするファイル(ABC.txt と MISS.txt)は、次のように、タブ区切りのファイルで、サンプル スクリプトの import フォルダー内へ格納してあります。

image

ログ記録の設定
ログ記録の設定

まずは、テキスト ファイル(ABC.txt)を SQL Server へインポートするパッケージを作成して、実行時にログが記録される設定にしてみましょう。

  1. SQL Server Data Tools を起動して、[スタート ページ]の[新しいプロジェクト]をクリックし、新しいプロジェクトを作成します。
    image
  2. [新しいプロジェクト]ダイアログでは、[インストールされたテンプレート]で「ビジネス インテリジェンス プロジェクト」の[Integration Services]をクリックし、「Integration Services プロジェクト」を選択します。
    image
    [名前]へ任意のプロジェクト名(画面は SSISoyo2)、[場所]へ任意の保存場所(画面は C:\)を入力して、[OK]ボタンをクリックします。
  3. 次に、データ転送を設定するために、SSIS ツールボックスの[お気に入り]カテゴリから[データ フロー タスク]を SSIS デザイナー上へドラッグ&ドロップします。
    image
  4. 配置した[データ フロー タスク]をダブル クリックして、[データ フロー]タブを表示します。
    image
  5. 次に、転送元データとしてテキスト ファイルを指定するため、SSIS ツールボックスの[その他の変換元]カテゴリから、[フラット ファイル ソース]を SSIS デザイナー上へドラッグ&ドロップします。
    image
  6. 配置した[フラット ファイル ソース]をダブル クリックして、[フラット ファイル ソースエディター]ダイアログを表示します。
    image
    このダイアログでは、転送元のテキスト ファイルを指定するために[新規作成]ボタンをクリックします。
  7. これにより、[フラット ファイル接続マネージャー エディター]ダイアログが表示されるので、[接続マネージャー名]へ任意の名前(テキストファイルへの接続 など)と入力し、[参照]ボタンをクリックします。
    image
    [開く]ダイアログが表示されたら、サンプル スクリプト内の「import」フォルダー内にある「ABC.txt」ファイルを選択して、[開く]ボタンをクリックします。
  8. [フラット ファイル接続マネージャー エディター]ダイアログへ戻ったら、[先頭データ行を列名として使用する]のチェックを外します。
    image
  9. 続いて、「列」ページをクリックして、[列区切り記号]で「タブ {t}」が選択されていることを確認します(ABC.txt ファイルはタブ区切りのファイルです)。
    image
    [1~3行のプレビュー]で転送元のデータを確認します。このファイルには、列見出しの行がないので、列名が自動的に「列0」、「列1」と設定されています。
  10. 次に、[詳細設定]ページをクリックして開きます。
    image
    テキスト ファイルの場合、デフォルトでは「文字列」(DT_STR:string)データ型としてデータが転送されますが、今回は、「列0」列(1 番左の列)のデータを数値として転送するように、「列0」列の[DataType]を「4 バイト符号付き整数」(SQL Server での int 型に相当するデータ型)へ変更します。変更後、[OK]ボタンをクリックします。
    [フラット ファイル ソース エディター]ダイアログへ戻ったら、[OK]ボタンをクリックして閉じます。
  11. 次に、転送先のデータベースを指定するために、SSIS ツールボックスの[その他の変換先]カテゴリから、[SQL Server 変換先]を SSIS デザイナー上へドラッグ&ドロップします。
    image
    続いて、転送元と転送先を関連付けるために、[フラット ファイル ソース]の青色の矢印を[SQL Server 変換先]まで、ドラッグ&ドロップして伸ばします。
  12. 次に、転送先の詳細設定を行うために、[SQL Server 変換先]をダブル クリックします。
    image
  13. [SQL 変換先エディター]ダイアログが表示されたら、[接続マネージャー]で[新規作成]ボタンをクリックします。
    image
    [OLE DB 接続マネージャーの構成]ダイアログが表示されたら、[新規作成]ボタンをクリックします。
  14. [接続マネージャー]ダイアログでは、[サーバー名]へ SQL Server の名前、[データベース名の選択または入力]で「ssisdb3」データベースを選択して、[OK]ボタンをクリックします。
    image
    [OLE DB 接続マネージャーの構成]ダイアログへ戻ったら、[OK]ボタンをクリックして、閉じます。これで、ssisdb3 データベースへ接続できるようになります。
  15. 次に、データの転送先となるテーブルを作成するために、次のように[SQL 変換先エディター]の[テーブルまたはビューを使用]で[新規作成]ボタンをクリックします。
    image
    これにより、[テーブルの作成]ダイアログが表示されて、転送元のデータをもとにテーブルを作成するための CREATE TABLE ステートメントが表示されます。今回は、テーブル名を「ABC」へ変更して、[OK]ボタンをクリックします。
    [OK]ボタンをクリックしたタイミングで、このステートメントが実行されて、ssisdb3 データベース内へ「ABC」テーブルが作成されます。
  16. [SQL 変換先エディター]ダイアログへ戻ったら、[マッピング]ページをクリックし、転送元のデータと転送先のデータのマッピングを設定します。
    image
    同じ名前の列同士がマッピングされていることを確認して、[OK]ボタンをクリックします。
    これで、ABC.txt ファイルのデータが ssisdb3 データベースへインポートすることができるようになりました。
ログ記録の設定

続いて、パッケージの実行時に、ログがテキスト ファイルに記録されるようにしてみましょう。

  1. 次のように、[SSIS]メニューから[ログ記録]をクリックします。
    image
  2. これにより、[SSIS ログの構成]ダイアログが表示されるので、[プロバイダーの種類]で「テキスト ファイルの SSIS ログ プロバイダー」を選択して、[追加]ボタンをクリックします。
    image
    次に、追加したログの[構成]で、「新しい接続」をクリックします。
  3. [ファイル接続マネージャー エディター]が表示されたら、[使用法の種類]で、ログ記録用のファイルを新しく作成するために「ファイルの作成」を選択し、[ファイル]で任意のファイル名(ここでは、C:\logging1.txt)と入力して、[OK]ボタンをクリックします。
    image
  4. [SSIS ログの構成]ダイアログへ戻ったら、[コンテナー]で「Package」をチェックして、[コンテナーに対して使用するログを選択します]で追加したログをチェックし、[OK]ボタンをクリックします
    image
  5. ツールバーの[デバッグ開始]ボタンをクリックしてパッケージを実行し、ここまでの設定を確認します。
    image
    配置されているオブジェクトに緑のチェックマークが付いて、データの転送が成功したことを確認したら、ツールバーの[デバッグの停止]ボタンをクリックして、デバッグを終了します。
  6. もう 1度、デバッグを開始して、パッケージを合計で 2回実行します。
  7. データが正常に転送されたことを確認するには、Management Studio から、ssisdb3 データベースの[ABC]テーブルを右クリックして、[上位 1000 行の選択]をクリックし、データを確認します。
    image
    パッケージを 2回実行しているので、2回分のデータがインポートできていることを確認できます。
  8. 次に、Windows エクスプローラーを起動して、C:\logging1.txt ファイルをダブル クリックして開き、記録されたログを確認します。
    image
    パッケージを実行した開始時刻(PackageStart)と終了時刻(PackageEnd)が 2回分記録されていることを確認することができます。このように、ログ記録を設定すると、パッケージの実行に関するログを簡単に取得できるようになります。
ログ記録の詳細設定
ログ記録の詳細設定

前の手順のログ記録では、パッケージの開始時刻と終了時刻にみの記録でしたが、ログ記録では、それ以外の情報(エラー情報など)も記録することができます。それはこれを試してみましょう。

  1. ログ記録の設定を変更するには、[SSIS]メニューから[ログ記録]をクリックします。
    image
  2. [SSIS ログの構成]ダイアログが表示されたら、[詳細]タブをクリックしてページを開き、ログを記録するイベントを選択します。
    image
    ここでは、「OnError」(エラーの発生)、「OnInformation」(情報メッセージ)、「OnTaskFailed」(タスクの失敗)、「OnWarning」(警告)をチェックして、[OK]ボタンをクリックします。
  3. パッケージを実行して、ここまでの設定を確認します。
    image
    配置されているオブジェクトに緑のチェックマークが付いて、データの転送が成功したことを確認したら、デバッグを終了します。
  4. 次に、Windows エクスプローラーから、C:\logging1.txt ファイルを開いて、記録されたログを確認します。
    image
    パッケージを実行した開始時刻(PackageStart)と終了時刻(PackageEnd)に加えて、タスクの情報(OnInformation)が記録されていることを確認できます。今回は、正常にデータが転送されているので、OnError や OnTaskFailed、OnWarning については、記録されていません。
    image
エラー発生時のログ記録の確認
エラー発生時のログ記録の確認

次に、転送元のテキスト ファイルを「MISS.txt」ファイルへ変更して、転送時にデータ型に関するエラーが発生するようにして、エラー発生時にどういったログが記録されるのかを確認してみましょう。

  1. 転送元のテキスト ファイルを変更するには、次のように[データ フロー]タブの画面下部の[接続マネージャー]に一覧されている「テキストファイルへの接続」(前の Step で作成したもの)をダブル クリックします。
    image
  2. これにより、[フラット ファイル接続マネージャー エディター]ダイアログが表示されるので、[ファイル名]の[参照]ボタンをクリックして、サンプル スクリプト内の「import」フォルダー内にある「MISS.txt」ファイルへ変更します。
    image
  3. 続いて、次のように「列」ページをクリックして、[1~3行のプレビュー]で転送元となるデータを確認します。
    image
    1 列目の「列0」列には、文字データが含まれていることに注目します。
  4. 続いて、[詳細設定]ページをクリックして開き、前の Step で設定したように「列0」列の[DataType]が「4バイト符号付き整数」(SQL Server の int 型に相当)になっていることを確認します。確認後、[OK]ボタンをクリックして、[フラット ファイル接続マネージャー エディター]ダイアログを閉じます。
    image
  5. パッケージを実行して、結果を確認します。
    image
    今度は、[フラット ファイル ソース]がエラーになって、データ転送が失敗していることを確認できます。
  6. 確認後、デバッグを終了します。
  7. 続いて、[実行結果]タブをクリックして、実行結果を確認します。
    image
    「データ変換に失敗しました。列 "列0" の~」というエラーが発生して、MISS.txt の「列0」でのデータ型の変換エラーによって、パッケージ実行が失敗したことを確認できます。これは、列0(1 列目)のデータ型を int 型に設定しているにも関わらず、文字データが含まれているために発生しています。
  8. 次に、Windows エクスプローラーから、C:\logging1.txt ファイルを開いて、記録されたログを確認します。
    image
    今回はデータ転送が失敗したので、エラーの発生(OnError)とタスクの失敗(OnTaskFailed)が記録されることを確認できます。
    このように、ログ記録を設定しておくと、パッケージの実行エラーを記録することができるので、大変便利です。
  9. 最後に、[ファイル]メニューの[すべてを保存]をクリックして、SSISoyo2 プロジェクトを保存しておきます。このプロジェクトは、次の Step でも引き続き使用します。

0 件のコメント:

コメントを投稿