Capturando consultas executadas no SQL Server (Trace) com PowerShell via SMO

Diferente do artigo original “Capturando consultas executadas no SQL Server (Trace) com .NET via SMO”, não consegui utilizar no PowerShell Threads ou Jobs (Jobs do PowerShell e não do SQL Server) para criar uma estrutura de timeout simples para este exemplo.

Assim optei por limitar a quantidade de linhas geradas pelo Trace (no caso 10 linhas), ao invés de criar um timeout com Get-Date (que vou demonstrar no exemplo da próxima semana).

Sem mais, segue o script para trabalhar com Trace no SQL Server com PowerShell:

# Referências
[void][system.reflection.assembly]::loadfrom("C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.ConnectionInfo.dll")
[void][system.reflection.assembly]::loadfrom("C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.ConnectionInfoExtended.dll")

$template = "C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Profiler\Templates\Microsoft SQL Server\100\Standard.tdf"

$conn = new-object Microsoft.SqlServer.Management.Common.SqlConnectionInfo

$conn.ServerName = ".\SQLEXPRESS"

#Criando o objeto TraceServer
$traceReader = new-object Microsoft.SqlServer.Management.Trace.TraceServer

#Iniciando a leitura do trace a partir do template Standard do SQL Server Profiler
$traceReader.InitializeAsReader($conn, $template)

$line = 0

#Lê até 10 comandos executados (enquanto $line < 10)
while ($traceReader.Read() -eq $TRUE -and $line -lt 10)
{
    $name = $traceReader.GetValue($traceReader.GetOrdinal("EventClass"));

    if ($name.Equals("SQL:BatchCompleted") -or $name.Equals("RPC:Completed")) {

        $spid = $traceReader.GetValue($traceReader.GetOrdinal("SPID"))

        $query = $traceReader.GetValue($traceReader.GetOrdinal("TextData"))

        $duration = $traceReader.GetValue($traceReader.GetOrdinal("Duration"))

        "-- SPID: $spid | Duration: $duration"

        "`n"

        Write-Host $query

        "`n `n"

        $line++
    }
}

#Fechando o trace de leitura
$traceReader.Close()
Anúncios

Um pensamento sobre “Capturando consultas executadas no SQL Server (Trace) com PowerShell via SMO

  1. Pingback: Trabalhando com SMO – Resumo « SQL From Hell.com

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s