Delen via


De PowerShell-provider gebruiken voor uitgebreide gebeurtenissen

van toepassing op:SQL ServerAzure SQL Database-

U kunt uitgebreide SQL Server-gebeurtenissen beheren met behulp van de SQL Server PowerShell-provider. De XEvent-submap is beschikbaar onder de SQLSERVER-schijf. U kunt de map openen met behulp van een van de volgende methoden:

  • Typ bij een opdrachtprompt sqlpsen druk op Enter. Typ cd xevent, en druk op Enter. Hier kunt u de cd- en dir opdrachten (of Set-Location en Get-ChildItem cmdlets) gebruiken om naar de servernaam en instantienaam te navigeren.

  • Vouw in Objectverkenner de exemplaarnaam uit, vouw Managementuit, klik met de rechtermuisknop op uitgebreide gebeurtenissenen klik vervolgens op PowerShell-starten. Hiermee start u PowerShell in het volgende pad:

    PS SQLSERVER:\XEvent\ServerName\InstanceName>

    Notitie

    U kunt PowerShell starten vanaf elk knooppunt onder uitgebreide gebeurtenissen. U kunt bijvoorbeeld met de rechtermuisknop op Sessiesklikken en vervolgens PowerShell starten. Hiermee wordt PowerShell één niveau dieper gestart in de map Sessies.

U kunt door de structuur van de XEvent-map bladeren om bestaande Extended Events-sessies en de bijbehorende gebeurtenissen, doelen en predicaten te bekijken. Bijvoorbeeld vanuit de PS SQLSERVER:\XEvent\ServerName\InstanceName> pad, als u cd-sessiestypt, drukt u op Enter, typt u diren drukt u vervolgens op Enter, ziet u de lijst met sessies die zijn opgeslagen op dat exemplaar. U kunt ook bekijken of de sessie wordt uitgevoerd (en of dit het geval is, hoe lang) en of de sessie is geconfigureerd om te starten wanneer het exemplaar wordt gestart.

Als u de gebeurtenissen, voorwaardes en doelen die aan een sessie zijn gekoppeld wilt bekijken, kunt u de map naar de sessienaam veranderen en vervolgens de map 'gebeurtenissen' of 'doelen' bekijken. Als u bijvoorbeeld de gebeurtenissen en de bijbehorende predicaten wilt weergeven die zijn gekoppeld aan de standaardsysteemstatussessie, typt u in de PS SQLSERVER:\XEvent\ServerName\InstanceName\Sessions> path, typt u cd system_health\events, drukt u op Enter, typt u diren drukt u op Enter.

De SQL Server PowerShell-provider is een krachtig hulpprogramma dat u kunt gebruiken om uitgebreide gebeurtenissensessies te maken, te wijzigen en te beheren. De volgende sectie bevat enkele basisvoorbeelden van het gebruik van PowerShell-scripts met uitgebreide gebeurtenissen.

Voorbeelden

In de volgende voorbeelden ziet u het volgende:

  • De scripts moeten worden uitgevoerd vanaf de PS SQLSERVER:\> prompt (beschikbaar door sqlps te typen bij een opdrachtprompt).

  • De scripts maken gebruik van het standaardexemplaar van SQL Server.

  • De scripts moeten worden opgeslagen met een .ps1-extensie.

  • Het PowerShell-uitvoeringsbeleid moet toestaan dat het script kan worden uitgevoerd. Als u het uitvoeringsbeleid wilt instellen, gebruikt u de cmdlet Set-Executionpolicy. (Typ voor meer informatie get-help set-executionpolicy -gedetailleerdeen druk op Enter.)

Met het volgende script maakt u een nieuwe sessie met de naam 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()  

Met het volgende script wordt het ringbufferdoel toegevoegd aan de sessie die in het vorige voorbeeld is gemaakt. (In dit voorbeeld ziet u het gebruik van de methode Alter. Houd er rekening mee dat u het doel kunt toevoegen wanneer u de sessie voor het eerst maakt.)

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

Met het volgende script maakt u een nieuwe sessie die gebruikmaakt van een predicaatexpressie. In dit geval verzamelt de sessie gegevens voor wanneer het bestand c:\temp.log wordt geschreven (via de sqlserver.file_written gebeurtenis).

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

Veiligheid

Als u een sessie met uitgebreide gebeurtenissen wilt maken, wijzigen of verwijderen, moet u de machtiging ALTER ANY EVENT SESSION hebben.

Zie ook

SQL Server PowerShell
De system_health-sessie gebruiken
uitgebreide hulpprogramma's voor gebeurtenissen