Condividi tramite


Utilizzare il provider PowerShell per eventi estesi

È possibile gestire eventi estesi di SQL Server utilizzando il provider PowerShell per SQL Server. La sottocartella XEvent è disponibile all'interno dell'unità SQLSERVER. È possibile accedere alla cartella utilizzando uno dei metodi seguenti:

  • Al prompt dei comandi digitare sqlps, quindi premere INVIO. Digitare cd xevent, quindi premere INVIO. È quindi possibile utilizzare i comandi cd e dir (o i cmdlet Set-Location e Get-Childitem) per passare al nome del server e al nome dell'istanza.

  • In Esplora oggetti espandere il nome dell'istanza, espandere Gestione, fare clic con il pulsante destro del mouse su Eventi estesi, quindi scegliere Avvia PowerShell. Verrà avviato PowerShell nel percorso seguente:

    PS SQLSERVER:\XEvent\ServerName\InstanceName>

    [!NOTA]

    È possibile avviare PowerShell da qualsiasi nodo all'interno di Eventi estesi. È possibile, ad esempio, fare clic con il pulsante destro del mouse su Sessioni e quindi scegliere Avvia PowerShell. Verrà avviato PowerShell a un livello più interno, nella cartella Sessioni.

È possibile esplorare l'albero delle cartelle XEvent per visualizzare sessioni di eventi estesi esistenti e i relativi eventi, database di destinazione e predicati associati. Se, ad esempio, dal percorso PS SQLSERVER:\XEvent\ServerName\InstanceName> si digita cd sessions, si preme INVIO, si digita dir e si preme di nuovo INVIO, sarà possibile visualizzare l'elenco di sessioni memorizzate su quell'istanza. È inoltre possibile visualizzare se la sessione è in esecuzione, e in tal caso per quanto tempo, e se la sessione è configurata per l'avvio all'avvio dell'istanza.

Per visualizzare gli eventi, i relativi predicati e i database di destinazione associati a una sessione, è possibile passare alla directory con il nome della sessione e quindi visualizzare la cartella degli eventi o dei database di destinazione. Per visualizzare, ad esempio, gli eventi e i relativi predicati associati alla sessione di integrità del sistema predefinita, dal percorso PS SQLSERVER:\XEvent\ServerName\InstanceName\Session>, digitare cd system_health\events, premere INVIO, digitare dir e quindi premere INVIO.

Il provider PowerShell per SQL Server è un potente strumento che consente di creare, modificare e gestire sessioni di eventi estesi. Nella sezione seguente vengono forniti alcuni esempi di base dell'utilizzo di script di PowerShell con eventi estesi.

Esempi

Negli esempi seguenti notare quanto segue:

  • È necessario eseguire gli script dal prompt PS SQLSERVER: \>, disponibile digitando sqlps al prompt dei comandi.

  • Gli script utilizzano l'istanza predefinita di SQL Server.

  • È necessario salvare gli script con estensione ps1.

  • I criteri di esecuzione di PowerShell devono consentire l'esecuzione dello script. Per impostare i criteri di esecuzione, utilizzare il cmdlet Set-Executionpolicy. Per ulteriori informazioni, digitare get-help set-executionpolicy -detailed, quindi preme INVIO.

Nello script seguente viene creata una nuova sessione denominata '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()

Nello script seguente viene aggiunta la destinazione del buffer circolare alla sessione creata nell'esempio precedente. In questo esempio si illustra l'utilizzo del metodo Alter. Tenere presente che è possibile aggiungere la destinazione quando si crea la sessione per la prima volta.

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

Nello script seguente viene creata una nuova sessione in cui è utilizzata un'espressione di predicato. In questo caso, la sessione raccoglie informazioni per il momento in cui verrà scritto il file c:\temp.log (tramite l'evento sqlserver.file_written).

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

Sicurezza

Per creare, modificare o eliminare una sessione di eventi estesi, è necessario disporre dell'autorizzazione ALTER ANY EVENT SESSION.

Vedere anche

Concetti

SQL Server PowerShell

Utilizzare la sessione system_health

Strumenti degli eventi estesi