如果我在 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'
我收到一个错误:
消息 25706,级别 16,状态 8,第 8 行
找不到事件属性或谓词源“sqlsever.database_name”。
同样的情况发生在WHERE sqlsever.database_id = DB_ID('master')
有没有办法按数据库过滤?
有两个问题。
SQL Server 2008 R2中没有任何
database_name
操作(在 SQL Server 2012 中引入):输出是:
但是有
sqlserver.database_id
。第二个问题是你的尝试database_id
没有奏效,因为你有一个错字(你有“sqlsever”,缺少一个“r”)。唯一可用的解决方案是跟踪在特定数据库上下文中执行的事务,无论您使用
database_id
的是database_name
.您可以使用任一谓词表达式设置事件会话以尝试跟踪数据库上的所有活动;但是,如果您在任何其他数据库的上下文中使用完全限定名称对其执行任何语句,则该事件将不会捕获它。
尝试以下演示它。第一个 SELECT 语句将被事件捕获,而第二个则不会。
然后...
查询目标数据只会显示上面第二行的一条记录。
我不会依赖这个谓词表达式。