SlideShare ist ein Scribd-Unternehmen logo
1 von 117
Downloaden Sie, um offline zu lesen
SQL Server 2008 R2 BI 添付資料




     SSISを使用した
゗ベントログ収集システム
    デモ環境構築手順

    2010年01月15日 第2.0版



          マ゗クロソフト株式会社
             エバンジェリスト
                 安納 順一
はじめに
注意
本手順書では SQL Server 2008 R2 を使用していますが、
操作手順は SQL Server 2008 と同様です。
製品名称については随時読み替えてください。
お手元にソフトウェゕが無い場合には以下より評価版をダウンロード可能です

• Windows Server 2008 または 2008 R2
  ■評価版ダウンロード
   [2008](最大240日)
     http://www.microsoft.com/japan/windowsserver2008/
     trial-software.mspx
        ※評価機関延長方法 http://support.microsoft.com/kb/948472
   [2008R2](最大180日)
   http://technet.microsoft.com/ja-jp/evalcenter/dd459137.aspx

• SQL Server 2008 R2 CTP 11月版
  ■CTP版
   http://www.microsoft.com/japan/sqlserver/2008/r2/prodinfo/
   downloads.mspx
構築するシステム゗メージ

                                    データベース:LogReport


                      SSIS



                                             テーブル
                                                            ログを収集するコ
                                                            ンピューターとロ
                                      ComputerList          グファイルのリスト
ネットワーク上のWindows Server または
Windows Client から、SSISのWMIデータリーダー
を使用して゗ベントログを収集し、SQL Server          Eventlog_Security       ログファイルごと
                                                            にテーブルを作成
2008 / R2 に保存する。
                                     Eventlog_Application
SSISで作成したパッケージは定期的に実行するもの
とし、前回実行時からの差分は゗ベントログの                    Eventlog_System
TimeWritten を基準にして判断するものとする。
実装する制御フロー
          開始

                     参照           ComputerList
      ソース取得
                                  取り込みソースのリスト

  ソースごとに処理を繰り返し

     テーブル作成

  取り込み範囲のチェック

  ゗ベントログを一括取得

  レコードを1件ずつ取り出し
    Insert 文を生成
     Insert into …

                          EventLogData_<logfilename>

         終了
゗ンストール
• 事前に以下の゗ンストールを済ませておく
• Windows Server 2008 / R2 x64
   – Active Directory
• SQL Server 2008 R2 EE x64
   – ゗ンスタンス機能
      • データベースエンジンサービス
   – 共有機能
      • Business Intelligence Development Studio
      • Integration Service

本手順書の環境
• ドメ゗ン名              :techfielders.com
• コンピューター名           :SQL01
• SQL Server ゗ンスタンス名 :MSSQLSERVER
  ※本環境ではすべての機能を1台のサーバーに゗ンストールした
第1章 準備
Windows Server にログオン

ドメ゗ン全体に対するシステム管理権限を持ったユーザー(規定は
Administrator)でログオンしてください。

本プロジェクトでは、便宜上、SQL Server の管理者 と ドメ゗ンの管理者は
Administrator であるとします。
LOGREPORT データベースの作成
SQL Server Management Studioの起動
 [スタート] - [すべてのプログラム] - [SQl Server 2008 R2 Novenver CTP ] - [SQL Server
 Management Studio] をクリック

 [サーバーへの接続]ダ゗ゕログボックスが起動したら、以下のように選択して[接
 続] をクリック
新しいデータベース
[データベース]を右クリックし、[新しいデータベース]を選択
[新しいデータベース]ダ゗ゕログのデータベース名に「LogReport]と入力し、[OK]
COMPUTERLISTテーブルの作成
新規テーブルの作成
[データベース]-[LogReport]-[テーブル] を右クリックして[新しいテーブル]を選択
列名とデータ型を以下の通り入力する。いずれ列もNULLは許容しないものとする。
テーブル名を設定
保存ボタンをクリックすると[名前の選択]ダ゗ゕログが表示されるので、テーブル名と
して「ComputerList」を入力する
値を追加する
ComputerListテーブルを右クリックし、「上位200行の編集」をクリックする
画面右側にテーブルの編集画面が表示されるので、以下のように入力する。こ
こでは、「SQL01」の「System゗ベントログ」と「Application゗ベントロ
グ」を指定している。
SSISプロジェクトの作成
Business Intelligence Development Studio の起動

  [スタート] - [すべてのプログラム] - [SQl Server 2008 R2 Novenver CTP ]
  - [SQL Server Business Intelligence Development Studio] をクリック
プロジェクトの作成
[フゔ゗ル]-[新規作成]-[プロジェクト]をクリック
Integration Services プロジェクトを選択
[Integration Services プロジェクト] を選択し、プロジェクト名をにゅうりょく
して [OK] をクリック。




                 プロジェクト名は「LogReport」とした
パッケージ名を設定
画面右側のソリューションエクスプローラーの[SSISパッケージ]ノード配下
で、パッケージをクリックして名前を指定する




                 ここでは、プロジェクト名
                 と同じ名前「LogReport」
                      とした
第2章 パッケージの作成
1.制御フローの作成
制御フローを開く
[制御フロー]タブをクリックして制御フローウゖンドウを開く
開始



                ここ             ソース取得


                           ソースごとに処理を繰り返し

                               テーブル作成

                            取り込み範囲のチェック

                            ゗ベントログを一括取得

                            レコードを1件ずつ取り出し
                              Insert 文を生成

                              Insert into …




                                  終了




「ソース取り込み」部の作成
ComputerListテーブルに接続し、゗ベントログが格納されているコンピュー
ターと、取込対象の゗ベントログの名前に一覧を取得する
[SQL実行タスク]を張り付ける
[ツールボックス]の[制御フロー項目]より[SQL実行タスク]を、制御フロー
フゖールドにドラッグ&ドロップする
タスクの名称を変更する
制御フロー項目の名称を既定の「SQL実行タスク1」から「ソース取り込み」に変
更する。※変更しなくても動作に影響はない
プロパテゖシートを開く
「ソース取り込み」をダブルクリックして、プロパテゖシートを開く
ConnectionTypeの選択
 [ConnectionType]から[ADO.NET]を選択する。
 ADO.NETが無い場合には、[OLE DB]のままでもよい
接続マネージャーの作成①
[Connection]から[新しい接続]を選択して[ADO.NETの接続マネージャーの
構成]を開き、[新規作成]をクリックする



                               <新しい接続>を選択
接続マネージャーの作成②
[サーバー名]と[データベースの名の選択または入力] を入力する
ここでは、「sql01」 および 「LogReport」 を入力した。

                            SQL Serverのサーバー名
                                  「sql01」




                           事前に作成しておいたデー
                           タベース「LogReport」
接続マネージャーの作成③
sql01.LogReport という名前の接続マネージャーが作成されたことを確認
ComputerListテーブルのレコードを取得するためのSQL文を入力
[SQLSourceType] が 「直接入力」になっていることを確認し、
[SQLStatement] 欄にSQL文を入力する



                           Select ComputerName,LogfileName
                           From dbo.ComputerList
結果セットを設定
[ResultSet] を 「完全な結果セット」に設定する。
これにより、SQLの結果が「データセット」で返される。
結果セットの格納先を設定①
 SQLの戻り値である結果セットの格納先となる変数を設定する。
 [結果セット] - [追加] をクリックし、[結果名]に「0」を入力。
 [変数名]をプルダウンして「<新しい変数>」を選択する。
結果セットの格納先を設定②
 結果セットを格納する変数を定義する。
 以下の通りに入力し、[OK]をクリック。




                          変数のスコープ


                           変数名



                          「Object」を選択




 持ち間違えてしまったら次のページを参照していったん削除し、
 再度同じ操作を繰り返す
結果セットの格納先を設定③
変数の定義を間違えた場合には、いったん削除し、②の操作を再度行う。




       クリックして削除




   左端にある「変数」をクリックして変数一覧を表示する
   画面左端に「変数」ボタンが無い場合には、
   [表示]メニュー-[その他のウィンドウ]-[変数] を選択
デバッグの実行①
  ここまでの設定が正しく行われていることを確認するために、デバッグを実行してみ
  る。画面上の[デバッグ開始ボタン]をクリックし、最終的に「ソース取り込み」が緑
  色になることを確認する。
  終了したら「デバッグ停止」をクリックする。         デバッグ停止
                   デバッグ開始




                                問題なければ緑色になる




「緑」ではなく「赤」の場合には設定に問題
があるので、次のページを参照のこと
デバッグの実行②
デバッグ結果が「赤」くなりエラーとなった場合には、[進行状況]タブをクリッ
クしてエラーメッセージを確認する。




  この場合はSQL文の列名に
  間違いがあることがわかる
開始


                               ソース取得


                  ここ       ソースごとに処理を繰り返し

            ※ループの作成のみ         テーブル作成

                            取り込み範囲のチェック

                            ゗ベントログを一括取得

                           レコードを1件ずつ取り出し
                             Insert 文を生成

                              Insert into …




                                  終了




「ソースごとに繰り返し」部の作成
「ソース取り込み」で作成した「ComputerList」オブジェクトからデータを繰
り返して取り出す処理を作成する
Foreachループコンテナを配置
 ツールボックスの「制御フロー項目」から[Foreachループコンテナー」をド
 ラッグ&ドロップして配置する
「ソース取り込み」と「Foreachループコンテナ」の接続

 「ソース取り込み」下部の「緑の線」をクリックし、次に「Foreachループコン
 テナー」をクリックすると、以下のように接続される。
 これは、「ソース取り込み」処理が完了したら「Foreachループコンテナ」に処
 理が移ることを意味している。
Foreachループコンテナの名称変更
 Foreachループコンテナの名称を、「ソースごとに処理を繰り返し」に
 変更する。※変更しなくても処理自体に影響はない
Foreachループコンテナの引数を設定
 Foreachループコンテナの引数を設定するため、[コレクション]を選択する




                                ADO列挙子を選択


                               「ソース取り込み」の戻り
                               値(データセット)が格納
                               されているComputerList
                               を選択

                               ComputerList内のレ
                               コードをすべて取り込む
                               ことを指定
引数 User::ComputerList の格納先変数を定義①
 ComputerList 変数は データセットであるため、これを1行ずつ取り込むため
 の変数を定義し、ComputerList から読み込んだレコードの格納先を指定する。
 なお、ComputerListは1行あたり2列(ComputerName, LogFileName)が含
 まれるので、2つの変数を定義する必要がある。


       User::ComputerList
        列0              列1
     ComputerName   LogFileName

     ComputerName   LogFileName




                                  列0   User::ComputerName

                                  列1    User::LogFileName
引数 User::ComputerList の格納先変数を定義②
 変数 tmpComputerName を定義する



                            ゗ンデックスには
                             「0」を入れる
引数 User::ComputerList の格納先変数を定義③
 変数 tmpLogFileName を定義する




                           ゗ンデックスには
                            「1」を入れる
引数 User::ComputerList の格納先変数を定義④
  以下のように定義されてることを確認する。
  くれぐれも、変数名と゗ンデックス番号の対応に間違いが無いように!
デバッグ ~ブレークポ゗ントの設定
「ソースごとに処理を繰り返し」を右クリックして[ブレークポ゗ントの編集] を選択する
「ブレークポ゗ントの設定」画面が表示されるので「ループの各繰り返しの開始点で停止し
ます」をチェックする
デバッグ ~ 実行
   ①実行する
                   ②この状態でいったん
                      停止する




   ブレークポ゗ントが設
   定されていることを示
      している




                          ④Variables の「+」を
      ③ローカルウゖンドウ          クリックして展開する
      のペ゗ンをドラッグし
        て大きくする
デバッグ ~変数をウオッチ式に追加
[ローカル]ウゖンドウの「Variable 一覧」から「User::tmpComputerName」
と 「User::tmpLogFileName」を選択後、右クリックして「ウオッチ式の追加」
をクリック




                              選択して右クリック
デバッグ ~ウオッチ画面で変数の中身を確認
          ①デバッグ開始




             ②ループの頭でいったん停止する
               処理中の項目は黄色くなる




         ③変数の値がComputerListテーブル内のレ
           コードと同じであることを確認する


                    ComputerListテーブルのレコード
                    の数だけ繰り返すことに注意する
開始


                            ソース取得


                        ソースごとに処理を繰り返し

              ここ           テーブル作成

                        取り込み範囲のチェック

                        ゗ベントログを一括取得

                        レコードを1件ずつ取り出し
                          Insert 文を生成

                           Insert into …




                               終了




「テーブル作成」部の作成
ループの頭では、゗ベントログを格納するレコードが存在するかどうかを
チェックし、なければ作成する
SQL実行タスクをループ内に配置
 テーブルを作成するためのSQL文を発行するので、[ツールボックス]-
 [制御フロー項目]から[SQL実行タスク] を選択し、「ソースごと処理を
 繰り返し」内にドラッグする
SQL実行タスクの名前を変更する
 SQL実行タスクの名前を「テーブル作成」に変更する
 ※この作業は処理自体に影響を与えません
接続オブジェクトを選択
SQL実行タスク「テーブル作成」をダブルクリックしてプロパテゖシートを表示する
ConnectionType で「ADO.NET」を選択
Connection には、既に作成してある接続マネージャ「sql01.LogReport」を選択する

                             sql01.LogReport は、ComputerList テー
                             ブルへの接続にも使用したもの。要は接続
                             文字列なので同じものを使用しても問題は
                             ない。
SQLStatementをExpressionで作成①
 ループを1回まわるたびに、゗ベントログのフゔ゗ル名(tmpLogFileName)を使用した
 テーブルを作成したい。しかし固定の SQL文を設定したので、テーブル名も固定になってし
 まう。そこで、[SQLStatement]に記述するSQL文に変数「User::tmpLogFileName」を使
 用できるようにする。
 そのためには Expression(式)機能を使用する。この機能を使用すると、各属性の値を
 「式」を使って表現することができ、式の中には「変数」を使用することができる。




                                          クリック
             「式」を選択
SQLStatementをExpressionで作成②




                    ②クリック




            ①SqlStatementSource を選択
※ Eventlog_<LogFileName>テーブル の形式
 作成したいテーブルは以下の形式
  Number(int)(key)
  Category(nvarchar(50))
  CategoryString(nvarchar(50))
  ComputerName(nvarchar(50))
  Data(nvarchar(max))
  EventCode(nvarchar(50))
  EventIdentifier(nvarchar(50))
  InsertionStrings(nvarchar(50))
  Logfile(nvarchar(50))
  Message(nvarchar(max))
  RecordNumber(int)
  SourceName(nvarchar(max))
  TimeGenerated(datetime)
  TimeWritten(datetime)
  Type(nvarchar(50))
  User(nvarchar(50))
SQLStatementをExpressionで作成③
 [式ビルダー]に「もしテーブルが無かったら作成する」SQL文を記述する




                             ここにSQL文を
                              入力する




               次のページへ
"IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[EventLogData_"+
@[User::tmpLogfileName] +"]') AND type in (N'U') ) "+
"CREATE TABLE [dbo].[EventLogData_"+ @[User::tmpLogfileName] +"] (
           [Number] [int] IDENTITY(1,1) NOT NULL,
           [Category] [nvarchar](50) NULL,
           [CategoryString] [nvarchar](50) NULL,
           [ComputerName] [nvarchar](50) NULL,
           [Data] [nvarchar](max) NULL,
           [EventCode] [nvarchar](50) NULL,
           [EventIdentifier] [nvarchar](50) NULL,
           [EventType] [nvarchar](50) NULL,
           [InsertionStrings] [nvarchar](50) NULL,
           [LogFile] [nvarchar](50) NULL,
           [Message] [ntext] NULL,
           [RecordNumber] [int] NULL,
           [SourceName] [nvarchar](max) NULL,
           [TimeGenerated] [datetime] NULL,
           [TimeWritten] [datetime] NULL,
           [Type] [nvarchar](50) NULL,
           [User] [nvarchar](50) NULL,
CONSTRAINT [PK_EventLogData_"+ @[User::tmpLogfileName] +"] PRIMARY KEY CLUSTERED (
           [Number] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON
[PRIMARY] TEXTIMAGE_ON [PRIMARY]"
デバッグ
デバッグを実行し、ComputerListで指定したテーブルが作成されるかどう
かを確認する。テーブルの名前は「Eventlog_Security」などとなる。

                 すべてのタスクが緑で完了するこ
                 とを確認




SQL Server Management Studioで、
ComputerListで指定したテーブルが作成された
ことを確認する。
確認後は削除してしまってもよい。
開始


                            ソース取得


                        ソースごとに処理を繰り返し

                           テーブル作成

              ここ        取り込み範囲のチェック

                        ゗ベントログを一括取得

                        レコードを1件ずつ取り出し
                          Insert 文を生成

                           Insert into …




                               終了




「取込範囲のチェック」部の作成
定期的に実行して最新の゗ベントログを取り込む場合、前回取り込んだ゗
ベントログの範囲をチェックする必要がある。ここでは゗ベントログの
TimeWritten を使用する。
「SQL実行タスク」をループ内に配置する
 既に保存されている゗ベントログの最終の「TimeWritten」値をチェックす
 るためのには、SQL文を発行して確認する必要がある。そのため、SQL文を
 発行するための「SQL実行タスク」をループ内に配置する。
「テーブルの作成」と「SQL実行タスク」を接続
 「テーブル作成」の次に取込範囲のチェックを実施するので、「テーブル作
 成」の緑の矢印を「SQL実行タスク」に接続する。
「SQL実行タスク」の名前を変更
「SQL実行タスク」を「取込範囲のチェック」に名称を変更する
接続オブジェクトを選択①
SQL実行タスク「取込範囲のチェック成」をダブルクリックしてプロパテゖシートを表示する
ConnectionType で「OLE DB」を選択
Connection で、「<新しい接続>」を選択する
              このタスクでは戻り値がDateTime形式となる。ADO.NET では、
              戻り値が無い場合にNULLを格納しようとするが、OLE DBで接
              続すると「1989/12/30 00:00:00」を戻すためエラーとなら
              ず都合がよい。
接続オブジェクトを選択②
「SQLStatement」の値を「式」で定義する①
 ループを1回まわるたびに、テーブル名「Eventlog_<User::tmpLogFileName>」 に格納
 されている「<User::ComputerName>」のログから、最大の 「TimeWritten」値を
 チェックしたい。そのために、 Expression(式)機能を使用してSQL文を作成する。




                                        ②クリック
            ①「式」を選択
「SQLStatement」の値を「式」で定義する②




                   ②クリック




           ①SqlStatementSource を選択
「SQLStatement」の値を「式」で定義する③
戻り値は MaxTimeWritten に格納される




"Select Max( TimeWritten ) as MaxTimeWritten From
[LogReport].[dbo].[EventLogData_"+ @[User::tmpLogFileName] +
"] Where [ComputerName] Like '" + @[User::tmpComputerName]
+ "%'"


     [ComputerName] 列を前方一致で検索している



   @[User::tmpLogFileName] はログフゔ゗ル名
   @[User::tmpComputerName] はコンピューター名


             変数名は大文字小文字を区別することに注意!
戻り値を設定①
SQL文の戻り値は「TimeWritten」値のうち最も新しい日時。つまり、単一行
の値が返される。




            ①「全般」を選択




                                ②「単一行」を選択
戻り値を設定② 結果セットの設定
 「結果セット」-「追加」をクリック
 「結果名」に「0」を入力し、「変数名」から「<新しい変数>」を選択
戻り値を設定③ 変数の定義
 SQL文も戻り値が格納される、MaxTimeWritten 変数を定義する




                             変数のスコープはループ内のみでよ
                             いので「ソースごとに処理を繰り返
                               し」ループを選択してある




                               日付の形式を指定する
                            形式があっていれば適当な値でOK
デバッグの実行①
「デバッグ開始」ボタンをクリックし、デバッグを開始する
ループの頭でいったん停止するので、画面下部のローカルウゖンドウから
[Valuables]-[User;;MaxTimeWritten]を右クリックして[ウォッチ式の追加]をク
リック
この時点では変数には初期値が格納されている。
デバッグの実行②
ウォッチ式の一覧に「User::MaxTimeWritten」が表示されたことを確認した
ら、「再開」ボタンでデバッグを再開する。


                                初期値




                  レコードが無いと「1899/12/30 0:00:00」が返される
デバッグの実行③
 全てが「緑」となり正常に完了することを確認する。
開始


                            ソース取得


                        ソースごとに処理を繰り返し

                           テーブル作成

                         取り込み範囲のチェック


              ここ         ゗ベントログを一括取得

                        レコードを1件ずつ取り出し
                          Insert 文を生成

                           Insert into …




                               終了




「イベントログを一括取得」部の作成
WMIを使用してリモートコンピューターの゗ベントログを一括取得する。
取得した゗ベントログはデータセットに格納される。
「WMIデータリーダータスク」を配置
タスク名の変更と優先順位制約の接続
 タスク名を「゗ベントログを一括取得」に変更し、「取込範囲のチェック」か
 ら「゗ベントログを一括取得」に対して優先順位制約(緑の線のこと)を接続
 する
WMI接続用の接続マネージャーを作成




 「テスト」をクリックしてLocalhostと接
    続できることを確認してみる
WMI用のクエリー設定
 WMI 用のクエリー(WQL)は変数に格納して渡すように設定する
WQLを格納する変数の定義




       これが変数名
戻り値の設定①
戻り値は゗ベントログが格納されたデータセットとなる。
データセットはあとで使用するために、変数に格納する。




                             データテーブル形式

                             「変数」を選択

                              <新しい変数>
戻り値の設定② 変数の定義




                必ずObject形式
                 を選択する!
変数の「式」を設定する①
画面左側の「変数」をクリックして変数一覧を表示する。
いま作成した「WQL」をクリックすると、画面右下のプロパテゖシートに「WQL」のプ
ロパテゖが表示される
変数の「式」を設定する②
変数の「式」を設定する③




                 忘れずに
               「True」にする
"Select * from Win32_NTLogEvent where logfile='"+
@[User::tmpLogFileName] + "' and TimeWritten > '" +
(DT_WSTR, 20) @[User::MaxTimeWritten] + "'"



  • @[User::tmpLogFileName]  は検索したいログフゔ゗ル名
  • (DT_WSTR, 20) は 20バ゗トのUnicode文字列
  • @[User::MaxTimeWritten] は最も新しいレコードの書き込み日時
デバッグ①
 「デバッグ開始」ボタンをクリックして、デバッグを開始する。
 「ローカル」ウゖンドウから「User::WQL」を右クリックして「ウォッチ式の追
 加」を実行する。
デバッグ②
変数 User::WQL にWQL文が代入されていることを確認する




取得してくるログが多い場合、「゗ベントログの一括取得」はしばらく黄色のま
まになることがある。
開始


                              ソース取得


                          ソースごとに処理を繰り返し

                             テーブル作成

                          取り込み範囲のチェック

                          ゗ベントログを一括取得


               ここ         レコードを1件ずつ取り出し
                            Insert 文を生成
         ※ループの作成のみ
                             Insert into …




                                 終了




「レコードを1件ずつ取り出し」部の作成
前項のゕウトプットである゗ベントログが格納されたデータセットを1行
ずつ読み込むためのForEachループを作成する。取り出したレコードは各
列を変数に格納する。
Foreachループコンテナを配置する
コンテナ名を変更し優先順位制約の接続
引数の設定
    ループの引数として、WMIの戻り値である User::EventDataを設定する




EventDataはデータセッ
  トが格納されている
引数の各カラム格納する変数を定義する
 全てObject型で定義する。最終的に、次のページと同じくなるようにする。




                間違えずに!
各変数は゗ベント
ログの各カラムに   全てObject型
対応しており、順
番も各カラムの並
び順
デバッグ
 デバッグを実行し、処理が正常に完了することを確認する。
開始


                                  ソース取得


                              ソースごとに処理を繰り返し

                                 テーブル作成

                               取り込み範囲のチェック

                               ゗ベントログを一括取得

                              レコードを1件ずつ取り出し

                  ここ            Insert 文を生成

                                 Insert into …




                                     終了




「INSERT文を作成」部の作成
 ここではSQL Serverに格納するためのInsert文をスクリプトタスクを使用
 して作成する。゗ベントログにはさまざまな文字列が含まれているため、
 SQL文エラーとならないよう簡単なVB.NETを使用して微調整する。
スクリプトタスクの配置
「レコードを1件ずつ取り出し」ループに、「スクリプトタスク」を配置する
名称を「Insert文を作成」に変更する
スクリプト言語を「VB」に切り替える
変数を定義する①      スコープを「レコードを1件ずつ取り出す」にするということ


 「レコードを1件ずつ取り出す」ループをクリックし、「変数」ボックスを
 表示する。
 以下の「変数の新規作成」ボタンをクリックして新しい変数を定義する。
変数を定義する② InsertSQL変数を作成
この後のタスクで実行するSQL文が格納される変数。
引数を指定する
スクリプトタスクの引数として、前項「レコードを1件ずつ取り出し」で作成
した変数すべてと、いま作成した InsertSQL を指定する。
引数を指定する②
スクリプト編集画面を開く




    次ページ以降のスクリプトを入力する
-----------------ここから
Dim strCategory As String = ""                                                  変数を初期化
If Not IsDBNull(Dts.Variables("User::Category").Value) Then
   strCategory = Dts.Variables("User::Category").Value.ToString
End If

Dim strCategoryString As String = ""
If Not IsDBNull(Dts.Variables("User::CategoryString").Value) Then
   strCategoryString = Dts.Variables("User::CategoryString").Value.ToString
End If

Dim strComputerName As String = ""
If Not IsDBNull(Dts.Variables("User::ComputerName").Value) Then
   strComputerName = Dts.Variables("User::ComputerName").Value
End If

Dim strData As String = ""
If Not IsDBNull(Dts.Variables("User::Data").Value) Then
   strData = Dts.Variables("User::Data").Value.ToString
End If

Dim strEventCode As String = ""
If Not IsDBNull(Dts.Variables("User::EventCode").Value) Then
   strEventCode = Dts.Variables("User::EventCode").Value.ToString
End If

Dim strEventIdentifier As String = ""
If Not IsDBNull(Dts.Variables("User::EventIdentifier").Value) Then
   strEventIdentifier = Dts.Variables("User::EventIdentifier").Value.ToString
End If
Dim strEventType As String = ""
If Not IsDBNull(Dts.Variables("User::EventType").Value) Then
                                                                                  変数を初期化
   strEventType = Dts.Variables("User::EventType").Value.ToString
End If

Dim strInsertionString As String = ""
If Not IsDBNull(Dts.Variables("User::InsertionString").Value) Then
   strInsertionString = Dts.Variables("User::InsertionString").Value.ToString
End If

Dim strLogfile As String = ""
If Not IsDBNull(Dts.Variables("User::Logfile").Value) Then
   strLogfile = Dts.Variables("User::Logfile").Value.ToString
End If

Dim strMessage As String = ""
If Not IsDBNull(Dts.Variables("User::Message").Value) Then
   strMessage = Dts.Variables("User::Message").Value.ToString
   strMessage = Replace(strMessage, "'", "-")                             Message内のシンングルクオー
End If                                                                    テーションをハ゗フンに置き換え
Dim strRecordNumber As String = ""
If Not IsDBNull(Dts.Variables("User::RecordNumber").Value) Then
   strRecordNumber = Dts.Variables("User::RecordNumber").Value.ToString
End If
Dim strSourceName As String = ""                                            変数を初期化
If Not IsDBNull(Dts.Variables("User::SourceName").Value) Then
   strSourceName = Dts.Variables("User::SourceName").Value.ToString
End If

Dim strTimeGenerated As String = "19000101 00:00:00"
If Not IsDBNull(Dts.Variables("User::TimeGenerated").Value) Then
   strTimeGenerated = Dts.Variables("User::TimeGenerated").Value.ToString
   ‘YYYYMMDD HH:NN:SS 形式を生成
   strTimeGenerated = Mid(strTimeGenerated, 1, 8) & " " & _
     Mid(strTimeGenerated, 9, 2) & ":" & _
     Mid(strTimeGenerated, 11, 2) & ":" & _
     Mid(strTimeGenerated, 13, 2)
End If

Dim strTimeWritten As String = "19000101 00:00:00"
If Not IsDBNull(Dts.Variables("User::TimeWritten").Value) Then
   strTimeWritten = Dts.Variables("User::TimeWritten").Value.ToString
   'YYYYMMDD HH:NN:SS
   strTimeWritten = Mid(strTimeWritten, 1, 8) & " " & _
     Mid(strTimeWritten, 9, 2) & ":" & _
     Mid(strTimeWritten, 11, 2) & ":" & _
     Mid(strTimeWritten, 13, 2)
End If
Dim strType As String = ""
                                                          変数を初期化
If Not IsDBNull(Dts.Variables("User::Type").Value) Then
   strType = Dts.Variables("User::Type").Value.ToString
End If

Dim strUser As String = ""
If Not IsDBNull(Dts.Variables("User::User").Value) Then
   strUser = Dts.Variables("User::User").Value.ToString
End If
SQL文を作成

Dim strSQL As String = "INSERT INTO [LogReport].[dbo].[EventLogData_" & strLogfile & "] ([Category]" & _
 ",[CategoryString]" & _
 ",[ComputerName]" & _
 ",[Data]" & _
 ",[EventCode]" & _
 ",[EventIdentifier]" & _
 ",[EventType]" & _
 ",[InsertionStrings]" & _
 ",[LogFile]" & _
 ",[Message]" & _                    " VALUES('" & strCategory & "'," & _
 ",[RecordNumber]" & _                "'" & strCategoryString & "'," & _
 ",[SourceName]" & _                  "'" & strComputerName & "'," & _
 ",[TimeGenerated]" & _               "'" & strData & "'," & _
 ",[TimeWritten]" & _                 "'" & strEventCode & "'," & _
 ",[Type]" & _                        "'" & strEventIdentifier & "'," & _
 ",[User])" & _                       "'" & strEventType & "'," & _
                                      "'" & strInsertionString & "'," & _
                                      "'" & strLogfile & "'," & _
                                      "'" & strMessage & "'," & _
                                      "" & strRecordNumber & "," & _
                                      "'" & strSourceName & "'," & _
                                      "'" & strTimeGenerated & "'," & _
                                      "'" & strTimeWritten & "'," & _
                                      "'" & strType & "'," & _
                                      "'" & strUser & "')"
生成したSQL文を、InsertSQL変数に格納
                                ここで作成したInsertSQLを、この後のタスクで実行する



Dts.Variables("User::InsertSQL").Value = strSQL

Dts.Variables("User::Category").Value = Nothing
Dts.Variables("User::CategoryString").Value = Nothing
Dts.Variables("User::ComputerName").Value = Nothing
Dts.Variables("User::Data").Value = Nothing
Dts.Variables("User::EventCode").Value = Nothing
Dts.Variables("User::EventIdentifier").Value = Nothing
Dts.Variables("User::EventType").Value = Nothing
Dts.Variables("User::InsertionString").Value = Nothing
Dts.Variables("User::Logfile").Value = Nothing
Dts.Variables("User::Message").Value = Nothing
Dts.Variables("User::RecordNumber").Value = Nothing
Dts.Variables("User::SourceName").Value = Nothing
Dts.Variables("User::TimeGenerated").Value = Nothing
Dts.Variables("User::TimeWritten").Value = Nothing
Dts.Variables("User::Type").Value = Nothing
Dts.Variables("User::User").Value = Nothing


                                                         -----------------ここまで
開始


                                   ソース取得


                               ソースごとに処理を繰り返し

                                  テーブル作成

                                取り込み範囲のチェック

                                ゗ベントログを一括取得

                               レコードを1件ずつ取り出し
                                 Insert 文を生成

                   ここ             Insert into …




                                      終了




「INSERT INTOを実行」部の作成
 作成したInsert文を実行してSQL Serverにデータを格納する
構築手順 Ssis イベントログ取込み 第2版
構築手順 Ssis イベントログ取込み 第2版
構築手順 Ssis イベントログ取込み 第2版

Weitere ähnliche Inhalte

Ähnlich wie 構築手順 Ssis イベントログ取込み 第2版

20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3
openrtm
 
Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦
urasandesu
 
Amazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズAmazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズ
SORACOM, INC
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01
Yusuke Ando
 
Cocoa Pro5
Cocoa Pro5Cocoa Pro5
Cocoa Pro5
hasegawa
 

Ähnlich wie 構築手順 Ssis イベントログ取込み 第2版 (20)

G0042 h
G0042 hG0042 h
G0042 h
 
20081003
2008100320081003
20081003
 
Version管理 1
Version管理 1Version管理 1
Version管理 1
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
 
PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3
 
Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!
 
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825 Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
 
WindowsでMySQL入門
WindowsでMySQL入門WindowsでMySQL入門
WindowsでMySQL入門
 
データベース11 - データベースとプログラム
データベース11 - データベースとプログラムデータベース11 - データベースとプログラム
データベース11 - データベースとプログラム
 
Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦
 
Spring bootでweb 基本編
Spring bootでweb 基本編Spring bootでweb 基本編
Spring bootでweb 基本編
 
Amazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズAmazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズ
 
CruiseControl.NET設置
CruiseControl.NET設置CruiseControl.NET設置
CruiseControl.NET設置
 
20120117 13 meister-elasti_cache-public
20120117 13 meister-elasti_cache-public20120117 13 meister-elasti_cache-public
20120117 13 meister-elasti_cache-public
 
Clrh 110716 wcfwf
Clrh 110716 wcfwfClrh 110716 wcfwf
Clrh 110716 wcfwf
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01
 
Cocoa Pro5
Cocoa Pro5Cocoa Pro5
Cocoa Pro5
 
1MB
1MB1MB
1MB
 
BBBBB
BBBBBBBBBB
BBBBB
 

Mehr von junichi anno

File Server on Azure IaaS
File Server on Azure IaaSFile Server on Azure IaaS
File Server on Azure IaaS
junichi anno
 
Vdi を より使いやすいインフラにするためのセキュリティ設計
Vdi を より使いやすいインフラにするためのセキュリティ設計Vdi を より使いやすいインフラにするためのセキュリティ設計
Vdi を より使いやすいインフラにするためのセキュリティ設計
junichi anno
 
SaaS としての IDM の役割
SaaS としての IDM の役割SaaS としての IDM の役割
SaaS としての IDM の役割
junichi anno
 

Mehr von junichi anno (20)

V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...
V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...
V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...
 
Microsoft Azure のセキュリティ
Microsoft Azure のセキュリティMicrosoft Azure のセキュリティ
Microsoft Azure のセキュリティ
 
Azure AD によるリソースの保護 how to protect and govern resources under the Azure AD
Azure AD によるリソースの保護 how to protect and govern resources under the Azure ADAzure AD によるリソースの保護 how to protect and govern resources under the Azure AD
Azure AD によるリソースの保護 how to protect and govern resources under the Azure AD
 
Azure AD による Web API の 保護
Azure AD による Web API の 保護 Azure AD による Web API の 保護
Azure AD による Web API の 保護
 
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
 
Azure Key Vault
Azure Key VaultAzure Key Vault
Azure Key Vault
 
個人情報を守るための アプリケーション設計(概要)
個人情報を守るためのアプリケーション設計(概要)個人情報を守るためのアプリケーション設計(概要)
個人情報を守るための アプリケーション設計(概要)
 
IoT のセキュリティアーキテクチャと実装モデル on Azure
IoT のセキュリティアーキテクチャと実装モデル on AzureIoT のセキュリティアーキテクチャと実装モデル on Azure
IoT のセキュリティアーキテクチャと実装モデル on Azure
 
DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計
DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計
DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計
 
Azureの管理権限について
Azureの管理権限について Azureの管理権限について
Azureの管理権限について
 
Azure Active Directory 1枚資料 20151125版
Azure Active Directory 1枚資料 20151125版Azure Active Directory 1枚資料 20151125版
Azure Active Directory 1枚資料 20151125版
 
リソーステンプレート入門
リソーステンプレート入門リソーステンプレート入門
リソーステンプレート入門
 
File Server on Azure IaaS
File Server on Azure IaaSFile Server on Azure IaaS
File Server on Azure IaaS
 
Windows File Service 総復習-Windows Server 2012 R2編 第1版
Windows File Service 総復習-Windows Server 2012 R2編 第1版Windows File Service 総復習-Windows Server 2012 R2編 第1版
Windows File Service 総復習-Windows Server 2012 R2編 第1版
 
Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...
Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...
Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...
 
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版
 
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理するHyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
 
Vdi を より使いやすいインフラにするためのセキュリティ設計
Vdi を より使いやすいインフラにするためのセキュリティ設計Vdi を より使いやすいインフラにするためのセキュリティ設計
Vdi を より使いやすいインフラにするためのセキュリティ設計
 
最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現
最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現
最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現
 
SaaS としての IDM の役割
SaaS としての IDM の役割SaaS としての IDM の役割
SaaS としての IDM の役割
 

Kürzlich hochgeladen

Kürzlich hochgeladen (12)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

構築手順 Ssis イベントログ取込み 第2版