51
1 SQL Server 2008 統合ログ管理システムを構築しよう マイクロソフト株式会社 エバンジェリスト 安納 順一 http://blogs.technet.com/junichia/

SQL Server 2008 で統合ログ管理システムを構築しよう

Embed Size (px)

DESCRIPTION

2009年9月25日 TechFieldersセミナー 「SQL Server 2008 R2 を使用して統合ログ管理 システムを構築しよう」

Citation preview

Page 1: SQL Server 2008 で統合ログ管理システムを構築しよう

1

SQL Server 2008 で統合ログ管理システムを構築しよう

マイクロソフト株式会社

エバンジェリスト

安納 順一http://blogs.technet.com/junichia/

Page 2: SQL Server 2008 で統合ログ管理システムを構築しよう

22

本日のスケジュール

13:30~16:30

SQL Server 2008で統合ログ管理システムを構築しよう

16:45~17:45SQL Serverエキスパートによる特別セッション「Hyper-V による SQL Server の統合」講師: 伊藤忠テクノソリューションズ株式会社 後藤 真人 様

17:45~18:30

ライトニングトーク

18:30~

懇親会

Page 3: SQL Server 2008 で統合ログ管理システムを構築しよう

33

本セミナーの目的と内容

目的:SQL Server は単なる「必須ソフト」ではないことを知る「なんか新しいことができそうだな」という夢を見る

内容:インフラ上のログをSQL Serverに集めて一元管理する

Page 4: SQL Server 2008 で統合ログ管理システムを構築しよう

44

お願い

• 細かな手順を全てお話しすることができません!すみません!

• SSIS/SSRS の考え方と「難解な部分」の解説を中心に行います

• 本日作成したプロジェクトと、その手順はBLOGに掲載しますhttp://blogs.technet.com/junichia/

• より理解を深めるためにおすすめ(私もこれで勉強しました)■SQL Server 2008 自習書シリーズhttp://technet.microsoft.com/ja-jp/sqlserver/dd610200.aspx

■SQL Server バーチャルラボhttp://technet.microsoft.com/ja-jp/virtuallabs/cc879114.aspx

• 2010年1-3月の間に 本セミナーの発展系を実施予定です(w/ Developer Evangelist 小高)是非とも開発担当の方とともにお越しください

Page 5: SQL Server 2008 で統合ログ管理システムを構築しよう

55

使用する環境

Windows Server 2008 R2 x64・Active Directory

Windows Server 2008 R2 x64・Internet Information ServiceSQL Server 2008 Enterprise Edition x64・インスタンス機能-データベースエンジンサービス-フルテキストサーチ

-Analysis Service-Reporting Service

・共有機能-Business Intelligence Development Studio-Integration Service

Windows 7 x64SQL Server Report Builder 2.0(ダウンロードセンターにて提供)

Page 6: SQL Server 2008 で統合ログ管理システムを構築しよう

66

ログ管理システムのイメージ

SQLDB

イベントログ

SSIS

SSRS

SSAS

【取り込み】・イベントログをデータベースに蓄積・定期的に取り込みタスクを実行・サーバーが増えても柔軟に対応可能

【統計資料】・期間を指定してレポートを作成・レポートの体裁は事前に定義できる・レポートはブラウザから表示できる

Page 7: SQL Server 2008 で統合ログ管理システムを構築しよう

77

ITPROを支える3つの機能

SSIS:SQL Server Integration Service

SSRS:SQL Server Reporting Service

SSAS:SQL Server Analysis Service

・多次元データベースによる分析(OLAP)・データマイニング

データ移入作業の可視化・外部ファイル、データベースからの取り込み・データ変換

資料作成の単純化・レポートテンプレートの作成、表示、印刷・パラメタ化による動的なレポートの生成

必要最小限のSQL文の知識と、若干のコーディング力が求められる

Page 8: SQL Server 2008 で統合ログ管理システムを構築しよう

8

取り込みプロセスの部品化と可視化

SQLDB

イベントログ

SSIS

データが無ければはじまらない!

Page 9: SQL Server 2008 で統合ログ管理システムを構築しよう

9

テーブル構成

ComputerName

LogFileName

ComputerList

EventLogData_<Logfile> 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(ntext)

RecordNumber(int)

SourceName(nvarchar(max))

TimeGenerated(datetime)

TimeWritten(datetime)

Type(nvarchar(50))

User(nvarchar(50))

<logfile> には、Application, System, Security などが入る

SystemApplicatio

nSecurity

Server01 Server02

Page 10: SQL Server 2008 で統合ログ管理システムを構築しよう

10

Eventlogを取り込む際の留意点Category

CategoryString

ComputerName

Data

EventCode

EventIdentifier

InsertionStrings

Logfile

Message

RecordNumber

SourceName

TimeGenerated

TimeWritten

Type

User

カテゴリ番号

カテゴリ名

イベントを生成したコンピュータ名

イベントの付帯情報

Uint16 形式のイベントID

Uint32 形式のイベントID

イベントの付帯情報

ログファイルの名前(System,Application,Security など)

イベントの説明文。4000文字(bstr)を超える可能性あり。シングルクオーテーションが含まれることが多い。

イベントレコードの通番 int32(max 9,223,372,036,854,775,807 )

イベントを生成したソースプロセス(MSSQL,MSInstaller など)

イベントが発生した日時。標準時で生成。

イベントが書き込まれた日時。標準時で生成。

イベントのタイプ(情報、エラー、警告、成功の監査、失敗の監査)

イベントを発生させたユーザー

2,147,483,647

Page 11: SQL Server 2008 で統合ログ管理システムを構築しよう

11

イベントログを取得するスクリプト例

strComputer = “.”Set objService = GetObject(“winmgmts:\\“ & strComputer & “\root\cimv2”)Set objEvtSet = objService.ExecQuery _

("Select * From Win32_NTLogEvent Where Logfile='System'")

For Each e In objEvtSet

wscript.echo e.ComputerName & "," & e.EventCode

Next

Page 12: SQL Server 2008 で統合ログ管理システムを構築しよう

12

Logfile 属性について

使用可能なLogfile属性は、以下のコマンドで調査できる

C:\> wmic nteventlog list brief

FileSize LogfileName Name 6361088 Application C:\Windows\System32\Winevt\Logs\Application.evtx 8022 69632 HardwareEvents C:\Windows\System32\Winevt\Logs\HardwareEvents.evtx 0 69632 Internet Explorer C:\Windows\System32\Winevt\Logs\Internet Explorer.evtx69632 Key Management Service C:\Windows\System32\Winevt\Logs\Key Management Service.evtx69632 Media Center C:\Windows\System32\Winevt\Logs\Media Center.evtx1052672 OAlerts C:\Windows\System32\Winevt\Logs\OAlerts.evtx 254 69632 ODiag C:\Windows\System32\Winevt\Logs\ODiag.evtx 0 69632 Operations Manager C:\Windows\System32\Winevt\Logs\Operations Manager.evtx69632 OSession C:\Windows\System32\Winevt\Logs\OSession.evtx 4 30740480 Security C:\Windows\System32\Winevt\Logs\Security.evtx 40359 8458240 System C:\Windows\System32\Winevt\Logs\System.evtx 20623 1118208 Windows PowerShell C:\Windows\System32\Winevt\Logs\Windows PowerShell.evtx

Page 13: SQL Server 2008 で統合ログ管理システムを構築しよう

13

(参考)WINEVT\Channels 配下のイベントHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels 配下のイベントは Win32_NTLogEvent では取得できない。

C:\>wevtutil.exe代替策

Page 14: SQL Server 2008 で統合ログ管理システムを構築しよう

14

取り込みプロセスをSSISでデザイン

※利用手順は自習書を!

Page 15: SQL Server 2008 で統合ログ管理システムを構築しよう

15

作業のはじまり

使用するツール

• SQL Server Business Intelligence Development Studio• SQL Server Management Studio

はじめにやること

• SQL Server Management Studio を起動• SQL Server Business Intelligence Development Studioを起動し、

[ファイル]-[新規作成]-[プロジェクト]から「Integration Service プロジェクト」を選択

Page 16: SQL Server 2008 で統合ログ管理システムを構築しよう

16

SSIS

制御フローを考えてみる

Computer List取り込みソースのリスト

ソース取得

開始

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

テーブル作成

取り込み範囲のチェック

イベントログを一括取得

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

Insert into …

EventLog Database終了

Insert 文を生成

Page 17: SQL Server 2008 で統合ログ管理システムを構築しよう

17

制御フローを作成するには

• 部品(制御フロー項目)をデザイン画面にドラッグ&ドロップ• 各部品のパラメタを設定する• 部品同士を矢印で接続して「フロー」を決める

事前に処理の流れを決めておくことが重要

SSIS

ソース取得

開始

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

テーブル作成

取り込み範囲のチェック

イベントログを一括取得

レコードごとに Insert 繰り返し

Insert into …

終了

Page 18: SQL Server 2008 で統合ログ管理システムを構築しよう

18

使用する部品(制御フロー項目)

• SQL文を発行するための部品• 「接続オブジェクト」の定義が必要

• 処理を繰り返すための部品• ファイルや変数、レコードセットの読み込みに使用• 処理回数が未定の場合に使用する

• VB.NETまたはC#を使用して柔軟な処理を実装したい場合に使用• 文字列の細かな処理などに使用すると便利

• WMIを使用した処理結果を受け取る場合に使用• 今回はイベントログの取得に使用している• ちなみに、EXEコマンドを実行したい場合には

Page 19: SQL Server 2008 で統合ログ管理システムを構築しよう

19

Page 20: SQL Server 2008 で統合ログ管理システムを構築しよう

20

部品(制御フロー項目)のI/O

部品

各部品は、複数のI/Oから選択することができる

データベース

ファイル

変数

直接入力データベース

ファイル

変数

(例)

変数

ループの中で処理する場合に、SQL文を変えながら処理が可能

SQL文

結果のレコードセットを変数に格納し、次の処理で使用できる

変数

接続マネージャー

Input Output

Page 21: SQL Server 2008 で統合ログ管理システムを構築しよう

21

接続マネージャー• 各部品(制御フロー項目)が外部リソースに接続する際に使用• 部品間で共有が可能

部品WMIデータリーダー

ファイル接続

WMI接続

変数

WQL

Page 22: SQL Server 2008 で統合ログ管理システムを構築しよう

22

変数

処理フローの中で使用できる、俗にいう「変数」スコープの設定が可能(プロジェクト全体/ループ内/部品内)

Boolean/Byte/Char/DateTime/DBNull/Doube/Int16/Int32/Int64/Object/SByte/Single/String/Uint32/UInt64

選択可能な型

TIPS

• 受け取る値の型がよくわからない場合には、「Object」型を選択しておくとよい

• Expressions属性により、変数が呼び出されたときに、ダイナミックに値を挿入することができる

超便利!

Page 23: SQL Server 2008 で統合ログ管理システムを構築しよう

23

Expressions属性• 部品(制御フロー項目)、接続マネージャー、変数などに用意されてい

る属性の1つ• Expression(式)を記載することで、指定した他の属性にダイナミック

に値を代入することができる

(例)SQL実行タスクSqlStatementSource属性にはSQL文を記載するが、処理によって接続先のテーブルを変えたい場合がある。Expressions属性を使用することで、SqlStatementSourceの値を部品が呼ばれる都度変更することができる。

Page 24: SQL Server 2008 で統合ログ管理システムを構築しよう

24

Expressions属性の使用例

"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,

テーブル名に、変数@[User::tmpLogfileName] を使用することで、部品が呼ばれるたびに、異なるテーブルに対して処理を行うことができる

Page 25: SQL Server 2008 で統合ログ管理システムを構築しよう

25

スクリプトタスク内での変数の使用

スクリプト内で変数取り扱うことで、VB.NETやC#を使用した柔軟な加工が可能

Dim strTimeGenerated As String = “19000101 00:00:00”If Not IsDBNull (Dts.Variables(“User::TimeGenerated”).Value) Then

strTimeGenerated = Dts.Variables(“User::TimeGenerated”).ValuestrTimeGenerated = Mid(strTimeGenerated , 1, 8) & “ “ & _

Mid(strTimeGenerated , 9, 2) & “ “ & _Mid(strTimeGenerated , 11, 2) & “ “ & _Mid(strTimeGenerated , 13, 2)

(例)DateTimeカラムに保存する前にDateTime形式に変換

Page 26: SQL Server 2008 で統合ログ管理システムを構築しよう

26

Page 27: SQL Server 2008 で統合ログ管理システムを構築しよう

27

処理1:ソース(コンピュータ一覧)の取得

イベントログの取り込み元を取得する

dbo.ComputerList

接続マネージャ

SQL

タスク

Select ComputerName,LogfileNameFrom dbo.ComputerList

User::ComputerList

SQLStatement

Page 28: SQL Server 2008 で統合ログ管理システムを構築しよう

28

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

Foreach

ループ

User::ComputerList

User::tmpComputerName

User::tmpLogfileName

テーブル作成

取り込み範囲のチェック

イベントログを一括取得

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

Insert into …

Foreach

ループ

ADO列挙子(データセット)

Insert 文を生成

Page 29: SQL Server 2008 で統合ログ管理システムを構築しよう

29

処理3:テーブルを作成<LogfileName>イベントログを格納するテーブルが無い場合には作成する

User::tmpComputerName

User::tmpLogfileName

SQL

文タスク

接続マネージャ

dbo.Eventlog_<LogfileName>

"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) ・・[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]"

Expressions(SQLStatement)

完全なSQL文はAppendixに掲載

Page 30: SQL Server 2008 で統合ログ管理システムを構築しよう

30

処理4:取り込み範囲のチェック

SQL

タスク

Select MAX(RecordNumber) as MaxRecordNumberfrom [EventLog].[dbo].[EventLogData” + @[User::tmpLogfileName] + “] Where [ComputerName] Like ‘“ + @[User::tmpComputerName]” + “’%”

Expressions(SQLStatement)

接続マネージャ

dbo.Eventlog_<LogfileName>

User::tmpComputerName

User::tmpLogfileName

変数はスコープ内であればどこででも使える

テーブルには複数のコンピュータのイベントログが格納されていることに

注意

User::MaxRecordNumber

Page 31: SQL Server 2008 で統合ログ管理システムを構築しよう

31

処理4:イベントログを一括取得

WMI

データリーダー

WQLQuerySource

接続マネージャ(WMI)

User::tmpComputerName

User::tmpLogfileName

User::WQL

“Select * from Win32_NTLogEvent where logfile=“ + @[User::tmpLogfileName] + “’ and RecordNumber > “ + (DT_WSTR 10) @(User::MaxRecordNumber)

Expression(Value)

User::MaxRecordNumber

Expression(ConnectionString)

User::ConnectionString

“ServerName=\\\\”+@[User::tmpComputerName]+”;Namespace=\\root\\cimv2;UserNtAuth;UserName=;”

Expression(Value)

User::EventData

属性値に変数を使用できる

Expressionsの中では「\」は

制御記号

キャストが可能

Page 32: SQL Server 2008 で統合ログ管理システムを構築しよう

32

処理5:レコードを1件ずつ取り出し

Foreach

ループ

User::EventData

Insert into を実行

Insert 文を生成

User::Category

User::CategoryString

User::ComputerName

User::Type

User::User

取り出した値が見えずらい場合には

Object形式にしておくと便利

Page 33: SQL Server 2008 で統合ログ管理システムを構築しよう

33

処理6:Insert 文を生成SQL文を生成するにあたり、各値をSQL Serverに取り込み可能な形式に整形する

User::Category

User::User

Script

タスク

Dim strCategory As String = ""If Not IsDBNull(Dts.Variables("User::Category").Value) Then

strCategory = Dts.Variables("User::Category").Value.ToStringEnd If

Dim strMessage As String = ""If Not IsDBNull(Dts.Variables("User::Message").Value) Then

strMessage = Dts.Variables("User::Message").Value.ToStringstrMessage = Replace(strMessage, "'", "-")

End If

変数の値がNullかどうかをチェックしてから

取り出す

Messageにはシングルクオーテーションが含まれているので置き換え

Page 34: SQL Server 2008 で統合ログ管理システムを構築しよう

34

Script

タスク

Dim strTimeGenerated As String = "19000101 00:00:00"If Not IsDBNull(Dts.Variables("User::TimeGenerated").Value) Then

strTimeGenerated = Dts.Variables("User::TimeGenerated").Value.ToStringstrTimeGenerated = Mid(strTimeGenerated, 1, 8) & " " & _

Mid(strTimeGenerated, 9, 2) & ":" & _Mid(strTimeGenerated, 11, 2) & ":" & _Mid(strTimeGenerated, 13, 2)

End If

Dim strSQL As String = "INSERT INTO [EventLog].[dbo].[EventLogData_" & strLogfile & "] ([Category]" & _

",[CategoryString]" & _",[ComputerName]" & _

" VALUES('" & strCategory & "'," & _"'" & strCategoryString & "'," & _"'" & strComputerName & "'," & _

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

DateTime列に取り込めるように整形

SQL文を生成

User::InsertSQL

Page 35: SQL Server 2008 で統合ログ管理システムを構築しよう

35

処理7:Insert Into を実行User::InsertSQL

SQL

タスク

')

SQLStatement

接続マネージャ

dbo.Eventlog_<LogfileName>

User::InsertSQL

INSERT INTO [EventLog].[dbo].[EventLogData_Application] ([Category],[CategoryString],[ComputerName],[Data],[EventCode],[EventIdentifier],[EventType],[InsertionStrings],[LogFile],[Message],[RecordNumber],[SourceName],[TimeGenerated],[TimeWritten],[Type],[User]) VALUES('0','','TF-SQL01-01.t6303.contoso.co.jp','','12290','1073819650','3','System.String[]','Application','Package"Package" has been cancelled.',3205,'SQLISPackage100','20090923 03:23:31','20090923 03:23:31','情報','T6303\administrator')

Value

Page 36: SQL Server 2008 で統合ログ管理システムを構築しよう

36

最後に:処理の自動化プロセスを実装し終えたら・[ビルド]する

- binフォルダに .dtsx ファイルが作成される・SQL Server Agent ジョブとして登録

- SQL Server Agent サービスを起動しておく(自動起動にする)- .dtsxファイル(パッケージファイル)を登録

Page 37: SQL Server 2008 で統合ログ管理システムを構築しよう

37

報告書のテンプレート化

資料は時間をかけずに作りたい!

SQLDB

SSIS

SSRS

Page 38: SQL Server 2008 で統合ログ管理システムを構築しよう

38

Eventlogを分析するには

System Application Securityパフォーマンス

ログ

日時

・・・・・・・・

• それぞれのデータの関連性を機械的に見出すのは難しい• 日時をキーに、それぞれのデータを比較、分析するのがおすすめ

本件は、次回のセミナーにて…

Page 39: SQL Server 2008 で統合ログ管理システムを構築しよう

39

作業のはじまり

使用するツール

• Microsoft SQL Server Report Builder 2.0

はじめにやること

• Microsoft SQL Server Report Builder 2.0 を起動する• SSRSに接続

http://ServerName/Repor_Server/

Page 40: SQL Server 2008 で統合ログ管理システムを構築しよう

40

作りたいレポート

□全て□エラー□警告□情報

タイプ V YYYYMMDD

YYYYMMDD

開始年月日

終了年月日

コンピュータ名 コンピュータ名

エラー警告

情報

CmputerName SourceName エラー 警告 情報

Computer01

Windows-Search

Security-SPP

Application Error

051

0241

10550

Page 41: SQL Server 2008 で統合ログ管理システムを構築しよう

41

グラフフィールドの設定

グラフフィールド

比較したい数字

横軸の指標

横軸が持つ要素

ComputerName

Count(type)

Type

凡例

Page 42: SQL Server 2008 で統合ログ管理システムを構築しよう

42

マトリックスの設定

[Type]

[ComputerName] [SourceName] [Count(Type)]

行グループ

コンピュータごとに複数のソース名が表示される

比較したい値

行ごとに比較したい指標

Page 43: SQL Server 2008 で統合ログ管理システムを構築しよう

43

パラメータの設定

• データセットのクエリ設定で、以下のようにWhere句を追記する

Where EventLogData_Application.Type IN (@p1) ANDEventLogData_Application.TimeGenerated >= (@p2)EventLogData_Application.TimeGenerated <= (@p3)

• 各パラメータをレポートフィールド上にドラッグドロップする

Page 44: SQL Server 2008 で統合ログ管理システムを構築しよう

44

デザインが終わったら• サーバーに保存• 以下のURLでアクセス

http://<ServerName>/Reports/またはhttp://<ServerName>/Report_Server/

注意• 一度サーバーに保存するとReport Builderでのプレビューが行えなくなります※再度 ローカルに保存しなおしてからReport Builderを再起動することで

プレビューができるようになります

Page 45: SQL Server 2008 で統合ログ管理システムを構築しよう

45

Page 46: SQL Server 2008 で統合ログ管理システムを構築しよう

46

• BI は我々の手の届くところにあります

• SQL Server はもはやツールの一部です

• SSIS/SSRS/SSAS も価格の一部です

• インフラ担当SEのみなさんが体感してください!

Page 47: SQL Server 2008 で統合ログ管理システムを構築しよう

47

進呈

本日のセミナーを みなさんの会社で実施してみませんか?

SQL Server 2008 勉強会キット・SQL Server 2008 各種自習書・本日のセミナー資料・本日のデモンストレーションで使用したプロジェクト・デモ環境の構築手順書

TechNet Plus Direct Subscription

詳細は近日公開!

講師はあなたです!

Page 48: SQL Server 2008 で統合ログ管理システムを構築しよう

48

「オラクル都市伝説」を読み解くシリーズ(動画)

YouTube上で近日公開!

SQL Server プロダクトマネージャー 北川が、オラクル社の人気コラム「都市伝説シリーズ シーズン2」を正しく読み解きます。

詳しくは、9月30日発行の TechNet Flash をご覧ください!

北川のBLOGもご覧ください http://blogs.technet.com/sqlpm-j/

Page 49: SQL Server 2008 で統合ログ管理システムを構築しよう

49

Page 50: SQL Server 2008 で統合ログ管理システムを構築しよう

50

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]"

Page 51: SQL Server 2008 で統合ログ管理システムを構築しよう

51