使用扩展事件捕获用户在 SQL Server 上运行的查询

use*_*339 5 sql-server

在 SQL 2016 上使用扩展事件 - 我们如何捕获用户针对特定数据库运行的所有查询。这有助于我们了解哪些开发人员/报告分析师/etl 开发人员正在对生产实例运行查询。

预期结果:用户名、TSQL 查询运行、完成时间

小智 5

您将要使用该sqlserver.sql_statement_completed事件,statement默认情况下该事件包括操作字段。此外,添加package0.collect_system_time操作,有多个选项可用于捕获用户名。

本示例用于sqlserver.session_nt_username获取当前会话 NT 用户。它将结果输出到一个文件中,您可能需要根据环境的需要调整一些选项。

CREATE EVENT SESSION [XE_QUERY_CAPTURE] ON SERVER 
ADD EVENT sqlserver.sql_statement_completed (
    SET collect_statement=(1)
    ACTION(package0.collect_system_time,sqlserver.session_nt_username)
    )
ADD TARGET package0.event_file(SET filename=N'C:\Test\XE_QUERY_CAPTURE.xel')
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
    MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,
    MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF
    );
GO

ALTER EVENT SESSION [XE_QUERY_CAPTURE] ON SERVER 
STATE = START;
Run Code Online (Sandbox Code Playgroud)