SQL Server をコマンドでトレースする


環境: SQL Server 2005 Express Edition

こんにちは。

Office も 2007 になって、開発をする過程で、SQL Server Express Edition などでトレースをする必要性に迫られるケースがあります。(SQL Server Management Studio Express でも、残念ながら SQL プロファイラーは付いていません。)
そこで、今回は、SQL Server でコマンドを使ってトレースをおこなう方法について説明します。(このコードは、[ ] の箇所を変更して、そのまま osql などでコピー/ペーストして使えます。)

osql などにログインしてください。

------------------------------------------------
 1. 以下のコマンドで、Trace ファイルを作成します。
また、trace_id を出力して、以降で、このIDを使用します。
(ファイル名は適当に変更してください。)
------------------------------------------------
declare @trace_id int
exec sp_trace_create @trace_id output, 0, N'C:worktrace_test'
print @trace_id
go

------------------------------------------------
 2. 以下のコマンドで、トレースするイベントを設定します。
Office 2007 のビジネスデータカタログなどではRPCが使われるため、下記を取っておけば充分追っかけることは可能でしょう、、、
(trace_id は前述で出力されたIDを使用してください。)
------------------------------------------------
declare @trace_id int
declare @on bit
set @trace_id = [previous value]
set @on = 1

-- AuditLogin StartTime
exec sp_trace_setevent @trace_id, 14, 14, @on
-- AuditLogin EndTime
exec sp_trace_setevent @trace_id, 14, 15, @on
-- AuditLogin DatabaseName
exec sp_trace_setevent @trace_id, 14, 35, @on
-- AuditLogin DBUserName
exec sp_trace_setevent @trace_id, 14, 40, @on

-- SQL:BatchStarting TextData
exec sp_trace_setevent @trace_id, 13, 1, @on
-- SQL:BatchStarting DatabaseName
exec sp_trace_setevent @trace_id, 13, 35, @on
-- SQL:BatchStarting DBUserName
exec sp_trace_setevent @trace_id, 13, 40, @on

-- SQL:BatchCompleted TextData
exec sp_trace_setevent @trace_id, 12, 1, @on
-- SQL:BatchCompleted Error
exec sp_trace_setevent @trace_id, 12, 31, @on
-- SQL:BatchCompleted DatabaseName
exec sp_trace_setevent @trace_id, 12, 35, @on
-- SQL:BatchCompleted DBUserName
exec sp_trace_setevent @trace_id, 12, 40, @on

-- RPC:Starting TextData
exec sp_trace_setevent @trace_id, 11, 1, @on
-- RPC:Starting DatabaseName
exec sp_trace_setevent @trace_id, 11, 35, @on
-- RPC:Starting DBUserName
exec sp_trace_setevent @trace_id, 11, 40, @on

-- RPC:Completed TextData
exec sp_trace_setevent @trace_id, 10, 1, @on
-- RPC:Completed Error
exec sp_trace_setevent @trace_id, 10, 31, @on
-- RPC:Completed DatabaseName
exec sp_trace_setevent @trace_id, 10, 35, @on
-- RPC:Completed DBUserName
exec sp_trace_setevent @trace_id, 10, 40, @on

-- PrepareSQL TextData
exec sp_trace_setevent @trace_id, 71, 1, @on
-- PrepareSQL DatabaseName
exec sp_trace_setevent @trace_id, 71, 35, @on
-- PrepareSQL DBUserName
exec sp_trace_setevent @trace_id, 71, 40, @on

-- ExecPreparedSQL TextData
exec sp_trace_setevent @trace_id, 72, 1, @on
-- ExecPreparedSQL Error
exec sp_trace_setevent @trace_id, 72, 31, @on
-- ExecPreparedSQL DatabaseName
exec sp_trace_setevent @trace_id, 72, 35, @on
-- ExecPreparedSQL DBUserName
exec sp_trace_setevent @trace_id, 72, 40, @on

go

------------------------------------------------
 3. トレースを開始します。
------------------------------------------------
declare @trace_id int
set @trace_id = [previous value]
exec sp_trace_setstatus @trace_id, 1
go

------------------------------------------------
 4. トレースを停止します。
------------------------------------------------
declare @trace_id int
set @trace_id = [previous value]
exec sp_trace_setstatus @trace_id, 0
go

------------------------------------------------
 5. トレースの終了処理をおこないます。
 ここで、トレースファイルにすべてフラッシュバックされます。
------------------------------------------------
declare @trace_id int
set @trace_id = [previous value]
exec sp_trace_setstatus @trace_id, 2
go

------------------------------------------------

あとは、上記で作成したトレースファイルを SQL Server Profiler のあるマシン上にコピーして SQL Server Profiler でトレースファイルを参照 (開く) するなどして、内容を確認してください。

 

Comments (0)

Skip to main content