SQL Server 2008 - 捕获所有命中服务器的SQL语句

Ran*_*der 9 sql-server profiler sql-server-2008 extended-events

任何人都可以建议我们在运行Profiler之外捕获发送到SQL Server的所有SQL语句的选项吗?我知道有几种方法可以做到这一点,但我想确保我不会忽略某些东西,例如现有的DM视图等.

非常感谢.

Mar*_*ith 13

SQL Server 2008中的扩展事件.这些似乎相当不充分.也许是由于缺乏UI支持但比SQL Traces更灵活(更多事件和更好的过滤可能性)更轻量级(由于更好的过滤和丢弃事件而不是阻塞的可能性)

示例语法如下.尽管如此,还有更多的事件,动作,谓词和输出目标可能性.

IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='test_trace')
DROP EVENT SESSION [test_trace] ON SERVER;
CREATE EVENT SESSION [test_trace]
ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
     ACTION (package0.callstack, sqlserver.session_id, sqlserver.sql_text)
     )
,
ADD EVENT sqlserver.sp_statement_completed(
     ACTION (package0.callstack, sqlserver.session_id, sqlserver.sql_text)
     )
ADD TARGET package0.asynchronous_file_target
(set filename = 'c:\temp\test_trace.xel' , metadatafile = 'c:\temp\test_trace.xem')
ALTER EVENT SESSION [test_trace] ON SERVER STATE = START
Run Code Online (Sandbox Code Playgroud)

并审查结果

SELECT CONVERT (XML, event_data) AS data
        FROM sys.fn_xe_file_target_read_file ('C:\Temp\test_trace*.xel',
         'C:\Temp\test_trace*.xem', NULL, NULL)
Run Code Online (Sandbox Code Playgroud)