Megosztás a következőn keresztül:


A PowerShell-szolgáltató használata kiterjesztett eseményekhez

A következőkre vonatkozik:SQL ServerAzure SQL Database

Az SQL Server kiterjesztett eseményeit az SQL Server PowerShell-szolgáltatóval kezelheti. Az XEvent almappája az SQLSERVER meghajtó alatt érhető el. A mappát az alábbi módszerek egyikével érheti el:

  • Egy parancssorba írja be sqlps, majd nyomja le az ENTER billentyűt. Írja be cd xevent, majd nyomja le az ENTER billentyűt. Innen a cd- és dir parancsokkal (vagy Set-Location és Get-ChildItem parancsmagokkal) navigálhat a kiszolgáló nevére és a példány nevére.

  • Az Object Explorerben bontsa ki a példány nevét, bontsa ki Felügyelet, kattintson a jobb gombbal a Bővített eseményekelemre, majd kattintson a PowerShell indításaparancsra. Ezzel elindítja a PowerShellt a következő útvonalon:

    PS SQLSERVER:\XEvent\ServerName\InstanceName>

    Jegyzet

    A PowerShellt bármely csomópontról elindíthatja Bővített eseményekalatt. Kattintson például a jobb gombbal a Munkamenetekelemre, majd kattintson a PowerShell indításaparancsra. Ez egy szinttel mélyebbre indítja a PowerShellt a Munkamenetek mappában.

Az XEvent mappafája között tallózva megtekintheti a meglévő Bővített események munkameneteket, valamint a hozzájuk kapcsolódó eseményeket, célokat és predikátumokat. Például a PS SQLSERVER:\XEvent\ServerName\InstanceName> elérési útból, ha cd-munkameneteket, nyomja le az ENTER billentyűt, írja be dir, majd nyomja le az ENTER billentyűt, láthatja az adott példányon tárolt munkamenetek listáját. Azt is megtekintheti, hogy a munkamenet fut-e (és ha igen, mennyi ideig), és hogy a munkamenet úgy van-e konfigurálva, hogy a példány indításakor induljon el.

Az események, azok előrejelzései és a munkamenethez társított célok megtekintéséhez módosíthatja a címtárakat a munkamenet nevére, majd megtekintheti az eseményeket vagy a célmappát. Az alapértelmezett rendszerállapot-munkamenethez társított események és predikátumok megtekintéséhez például a PS SQLSERVER:\XEvent\ServerName\InstanceName\Sessions> elérési útján, írja be cd system_health\events, nyomja le az ENTER billentyűt, írja be dir, majd nyomja le az ENTER billentyűt.

Az SQL Server PowerShell-szolgáltató egy hatékony eszköz, amellyel kiterjesztett események munkameneteit hozhatja létre, módosíthatja és kezelheti. Az alábbi szakasz néhány alapvető példát mutat be a PowerShell-szkriptek kiterjesztett eseményekkel való használatára.

Példák

Az alábbi példákban jegyezze fel a következőket:

  • A szkripteket a PS SQLSERVER:\> parancssorból kell futtatni (sqlps parancssorba való beírásával érhető el).

  • A szkriptek az SQL Server alapértelmezett példányát használják.

  • A szkripteket .ps1 kiterjesztéssel kell menteni.

  • A PowerShell végrehajtási szabályzatának engedélyeznie kell a szkript futtatását. A végrehajtási szabályzat beállításához használja a Set-Executionpolicy parancsmagot. (További információért írja be a get-help set-executionpolicy – részletesla, majd nyomja meg az ENTER billentyűt.)

A következő szkript létrehoz egy új munkamenetet, amely a "TestSession" nevet viseli.

#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()  

Az alábbi szkript hozzáadja a gyűrűpuffer-célértéket az előző példában létrehozott munkamenethez. (Ez a példa az Alter metódus használatát mutatja be. Vegye figyelembe, hogy a munkamenet első létrehozásakor hozzáadhatja a célértéket.)

#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()  

Az alábbi szkript létrehoz egy új munkamenetet, amely predikátumkifejezést használ. Ebben az esetben a munkamenet információkat gyűjt arról, hogy a c:\temp.log fájl mikor van megírva (az sqlserver.file_written eseményen keresztül).

#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()  

Biztonság

Kiterjesztett események munkamenetének létrehozásához, módosításához vagy elvetéséhez rendelkeznie kell az ALTER ANY EVENT SESSION engedéllyel.

Lásd még:

SQL Server PowerShell
A system_health munkamenet használata
Bővített eseményeszközök