Se eu fizer uma sessão de evento estendida como esta no SQL Server 2008 R2:
CREATE EVENT SESSION [Query tracing] ON SERVER
ADD EVENT sqlserver.rpc_completed
(
ACTION(sqlserver.sql_text)
WHERE sqlsever.database_name = 'master'
Eu recebo um erro:
Msg 25706, Nível 16, Estado 8, Linha 8
Não foi possível encontrar o atributo do evento ou a origem do predicado, "sqlsever.database_name".
O mesmo ocorre paraWHERE sqlsever.database_id = DB_ID('master')
Existe alguma maneira de filtrar por banco de dados?
Duas coisas que são o problema.
Não há
database_name
ação no SQL Server 2008 R2 (foi introduzido no SQL Server 2012):A saída disso é:
Mas existe
sqlserver.database_id
. O segundo problema é que sua tentativa comdatabase_id
não funcionou porque você tem um erro de digitação (você tem "sqlsever", faltando um "r").A única solução disponível é rastrear as transações que são executadas em um contexto de banco de dados específico , quer você use
database_id
oudatabase_name
.Você pode configurar uma sessão de evento usando expressões predicadas para tentar rastrear toda a atividade em um banco de dados; mas se você executar qualquer instrução usando nomes totalmente qualificados em relação a ela no contexto de qualquer outro banco de dados, o evento não a capturará.
Tentar o seguinte demonstra isso. A primeira instrução SELECT será capturada pelo evento e a segunda não.
Então...
Consultar os dados de destino exibirá apenas um único registro para a segunda linha acima.
Eu não confiaria nessa expressão de predicado.