SQL Server 2008 - 捕获所有访问服务器的 SQL 语句

问题描述 投票:0回答:5

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

非常感谢

sql-server sql-server-2008 profiler extended-events
5个回答
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

并审查结果

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)

1
投票

如果您对 Profiler 的问题不是您不想使用它,而是您不能使用它,也许您可以使用 Profiler for Microsoft SQL Server 2005/2008 Express Edition 它是免费和开源的。


1
投票

我认为你的选择是

有一些 DMV 可以收集诸如长时间运行的查询之类的信息,但我认为没有一个可以为您提供所有信息。


1
投票

您可以使用 Tracing 以编程方式捕获输出:Programmatically receiving profiler events (real time) from SQL Server 2005


0
投票

对于它的价值,“Inside Microsoft SQL Server 2008 T-SQL Programming”一书有一章由 Greg Low 撰写,着眼于 SQL Server 2008 中的所有日志记录和审计选项。它讨论了何时应该使用每个选项以及每个的优点和缺点。话虽如此,你所做的可能是最好的。

© www.soinside.com 2019 - 2024. All rights reserved.