在运行 Profiler 之外,任何人都可以建议我们在捕获发送到 SQL Server 的所有 SQL 语句时可能有的选项吗?我知道有几种方法可以做到这一点,但要确保我没有忽略某些东西,例如现有的 DM 视图等。
非常感谢。
在运行 Profiler 之外,任何人都可以建议我们在捕获发送到 SQL Server 的所有 SQL 语句时可能有的选项吗?我知道有几种方法可以做到这一点,但要确保我没有忽略某些东西,例如现有的 DM 视图等。
非常感谢。
SQL Server 2008 中的扩展事件。这些似乎没有得到充分利用。也许是由于缺乏 UI 支持,但比 SQL 跟踪更灵活(更多事件和更好的过滤可能性)更轻量级(由于更好的过滤和删除事件而不是阻止的可能性)
示例语法如下。不过,还有更多的事件、动作、谓词和输出目标的可能性。
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)
如果您对 Profiler 的问题不是您不想使用它,而是您不能使用它,也许您可以使用Profiler for Microsoft SQL Server 2005/2008 Express Edition它是免费和开源的。
您可以使用跟踪以编程方式捕获输出:以编程方式从 SQL Server 2005 接收探查器事件(实时)
值得一提的是,“Inside Microsoft SQL Server 2008 T-SQL Programming”一书有一个伟大的章节,由 Greg Low 撰写,着眼于 SQL Server 2008 中的所有日志记录和审计选项。它讨论了何时应该使用每个选项以及各有优劣。话虽如此,你所做的可能是最好的。