拡張イベントへの PowerShell プロバイダーの使用
SQL Server PowerShell プロバイダーを使用して、 SQL Server 拡張イベントを管理できます。 XEvent サブフォルダーは、SQLSERVER ドライブで利用可能です。 このフォルダーには、次のいずれかの方法でアクセスできます。
コマンド プロンプトで、「」と入力
sqlps
し、Enter キーを押します。 「cd xevent
」と入力し、Enter キーを押します。 そこから、 cd コマンドとdir
コマンド (または Set-Location コマンドレットと Get-Childitem コマンドレット) を使用して、サーバー名とインスタンス名に移動できます。オブジェクト エクスプローラーで、インスタンス名、 [管理]の順に展開し、 [拡張イベント]を右クリックして、 [PowerShell の起動]をクリックします。 これにより、次のパスで PowerShell が起動します。
PS SQLSERVER:\XEvent\ServerName\InstanceName>
注意
PowerShell は、 [拡張イベント]の下の任意のノードから起動できます。 たとえば、 [Sessions]を右クリックし、 [PowerShell の起動]をクリックできます。 これにより、1 レベル深い Sessions フォルダーで PowerShell が起動します。
XEvent フォルダー ツリーを参照して、既存の拡張イベント セッションと、関連するイベント、ターゲット、および述語を表示できます。 たとえば、PS SQLSERVER:\XEvent\ServerName InstanceName\> パスから、 と入力cd sessions
した場合、Enter キーを押し、「」と入力dir
して Enter キーを押すと、そのインスタンスに格納されているセッションの一覧が表示されます。 また、セッションが実行中かどうか (および実行中の場合は実行時間)、およびセッションがインスタンスの起動時に開始されるように構成されているかどうかも表示されます。
セッションに関連付けられているイベント、述語、およびターゲットを表示するには、ディレクトリをセッション名に変更してから、events フォルダーまたは targets フォルダーを表示します。 たとえば、既定のシステム正常性セッションに関連付けられているイベントとその述語を表示するには、PS SQLSERVER:\XEvent\ServerName\InstanceName\Sessions> パスから、「Enter キーを押して、」と入力cd system_health\events,
dir
し、Enter キーを押します。
SQL Server PowerShell プロバイダーは、拡張イベント セッションの作成、変更、および管理に使用できる強力なツールです。 次のセクションでは、拡張イベントに PowerShell スクリプトを使用する基本的な例をいくつか紹介します。
例
以下の例では、次の点に注意してください。
スクリプトは PS SQLSERVER:\> プロンプトから実行する必要があります (コマンド プロンプトで と入力
sqlps
して使用できます)。スクリプトでは、 SQL Serverの既定のインスタンスを使用します。
スクリプトは、.ps1 拡張子を付けて保存してください。
PowerShell 実行ポリシーで、スクリプトを実行できるようにする必要があります。 実行ポリシーを設定するには、 Set-Executionpolicy コマンドレットを使用します (詳細については、「
get-help set-executionpolicy -detailed
」と入力し、Enter キーを押します)。
次のスクリプトでは、"TestSession" という名前の新しいセッションが作成されます。
#Script for creating a session.
cd XEvent
$h = hostname
cd $h
#Use the default instance.
$store = dir | where {$_.DisplayName -ieq 'default'}
$session = New-Object Microsoft.SqlServer.Management.XEvent.Session -ArgumentList $store, "TestSession"
$event = $session.AddEvent("sqlserver.file_written")
$event.AddAction("package0.callstack")
$session.Create()
次のスクリプトでは、前の例で作成したセッションにリング バッファー ターゲットが追加されます (この例では、 メソッドの使用方法を Alter
示します。最初にセッションを作成するときにターゲットを追加できることに注意してください)。
#Script to alter a session.
cd XEvent
$h = hostname
cd $h
cd DEFAULT\Sessions
#Used to find the specified session.
$session = dir | where {$_.Name -eq 'TestSession'}
#Add the ring buffer target and call the Alter method.
$session.AddTarget("package0.ring_buffer")
$session.Alter()
次のスクリプトでは、述語式を使用する新しいセッションが作成されます。 この例では、sqlserver.file_written イベントを利用して、c:\temp.log ファイルに書き込まれたときの情報を収集します。
#Script for creating a session.
cd XEvent
$h = hostname
cd $h
#Use the default instance.
$store = dir | where {$_.DisplayName -ieq 'default'}
$session = New-Object Microsoft.SqlServer.Management.XEvent.Session -ArgumentList $store, "TestSession2"
$event = $session.AddEvent("sqlserver.file_written")
#Construct a predicate "equal_i_unicode_string(path, N'c:\temp.log')".
$column = $store.SqlServerPackage.EventInfoSet["file_written"].DataEventColumnInfoSet["path"]
$operand = new-object Microsoft.SqlServer.Management.XEvent.PredOperand -argumentlist $column
$value = new-object Microsoft.SqlServer.Management.XEvent.PredValue -argumentlist "c:\temp.log"
$compare = $store.Package0Package.PredCompareInfoSet["equal_i_unicode_string"]
$predicate = new-object Microsoft.SqlServer.Management.XEvent.PredFunctionExpr -ArgumentList $compare, $operand, $value
$event.SetPredicate($predicate)
$session.Create()
Security
拡張イベント セッションを作成、変更、または削除するには、ALTER ANY EVENT SESSION 権限が必要です。