在SQL Server 2008 Express数据库中记录所有查询?

63

有没有一种方法可以告诉SQL Server 2008 Express将每个查询(包括每个SELECT查询!)记录到文件中?

这是一台开发机器,因此记录Select查询的负面影响并不是问题。

在有人建议使用SQL Profiler之前:Express中没有这个选项(是否有人知道Web Edition中是否有?),而我正在寻找一种即使我离开也可以记录查询的方法。

8个回答

69

SQL Server Profiler:

  • 文件 → 新建跟踪
  • 显示“常规”选项卡。
  • 在此处,您可以选择“保存到文件:”,以便记录到文件中。
  • 查看“事件选择”选项卡
  • 选择要记录的项目。
  • TSQL → SQL:BatchStarting将获取您要查询的SQL语句
  • 存储过程→RPC:Completed将获取您要查询的存储过程。

有关更多信息,请参见 Microsoft: SQL Server 2008 Books Online - 使用 SQL Server Profiler

更新- SQL Express 版本:

有评论说 MS SQL Server Profiler 不适用于 Express 版本。
似乎有一个免费的替代品:Microsoft SQL Server 2005 Express 版本的分析器


2
我个人没有尝试过这个,但是在这里:Microsoft SQL Server 2005 Express Edition 的分析器 http://sqlprofiler.googlepages.com/ - KyleLanser
我建议的工具目前不支持2008,但是我下载了源代码,更新了项目引用以引用2008 SDK,然后应用程序就可以工作了。我已经给维护者发了电子邮件,请求他更新该项目。 - KyleLanser
1
更新:(1)该工具似乎不支持将日志保存到文件中。(2)如果您需要获取源代码并更新工具以使其适用于您的需求,请发送电子邮件至kylelanser@yahoo.ca,我们将为您提供帮助。 - KyleLanser
我尝试了这个免费工具,但它似乎没有显示实际的SQL查询,只显示了它们所需的时间。不过可能是我使用方法不对。 - Richard Garside
1
他们似乎现在要收费使用SQL Profiler Express,而旧版本在打开时会关闭并声称有新版本可用... - jocull
显示剩余4条评论

32

还有一种获取MS SQL Server Express上执行的查询信息的方法,在这里有描述。

简而言之,它运行智能查询到系统表并获取关于查询(或缓存查询计划,如果需要)的信息(文本、执行时间)。因此,您可以在MSSQL 2008 Express版本中无需分析器获取有关执行的查询的信息。

SELECT deqs.last_execution_time AS [Time], dest.TEXT AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY deqs.last_execution_time DESC

28

虽然回答有点晚,但我希望对其他读者有用...

除非只在开发环境中使用,否则使用SQL Server Express处理诸如此类的高级审计要求并不是最优选择。

您可以使用跟踪(www.broes.nl/2011/10/profiling-on-sql-server-express/)获取所需数据,但您必须自己解析这些数据。

有第三方工具可以完成此操作,但其成本将相当高。ApexSQL的Log explorer可以记录所有内容,但选择和Idera公司的compliance manager也会记录选择语句,但它的成本要高得多。


这个在 SQL Server 2014 Express 自带的分析器中有所改善吗? - zanlok

3
您可以记录更改。SQL Server 2008通过Change Data Capture使此变得尤为容易。但是,SQL Server在记录SELECT方面并不是很好。理论上可以使用分析器,但这会降低性能。您可能可以在桌面上“逃脱”,但我认为您会注意到机器的速度足以引起问题。而且,在任何部署后都绝对行不通。
还有一点很重要,有几个人已经错过了:除非他们为2008年更改了某些内容,否则无法触发SELECT。

谢谢。嗯,这是一台开发机器,所以如果我可以打开/关闭该功能,性能就不是问题。在生产环境中捕获选择似乎本来就是灾难的配方。 - Michael Stum

1

仅供记录,我将包含使用DataWizard的SQL性能分析器的提示作为单独的答案,因为它与指向SQL Server Profiler的{{link2:答案}相反。

有14天的免费试用期,但即使您需要购买它,也只需20美元即可获得3个服务器(在撰写本文时,2012-06-28)。考虑到每个使用SQL Server Express版的人都节省了数千美元,这对我来说似乎更加公平。

到目前为止,我只使用过试用版,它提供了OP所寻找的功能:跟踪进入特定数据库的所有查询的方法。它还提供将跟踪导出到XML文件的选项。付费版本提供了一些更多的功能,但我还没有尝试过。

免责声明:我只是另一个开发人员,偶尔会搞乱DB,并且我与DataWizard没有任何关联。我碰巧喜欢他们的工具,并希望让人们知道它的存在,因为它帮助我对我的SQL Server Express安装进行了分析。


当一家公司决定拿走之前开源免费的产品,然后完全淹没免费版本去销售时,我感到很不舒服。我理解投入时间到一个项目并想要将其商业化。但是留下旧版本,并且不要像Red-Gate(.Net Reflector)那样禁用某人的工作安装。我只使用Anjlab是因为它是免费的。如果我要花$20购买一个工具,我想我宁愿花$50购买包括SQL Profiler和几乎所有其他SQL Server功能的SQL Server Developer Edition。 - Sam
1
@Sam:感谢您的评论。我不知道SQL Server还有一个“开发人员版本”!50美元是个非常棒的交易。我同意您的观点,旧版软件应该仍然可用。但对于新用户来说,我不觉得这是个问题。他们要么购买它,要么不购买。 - Oliver

0

以下的SQL查询可以显示简单的查询日志:

SELECT last_execution_time, text
FROM sys.dm_exec_query_stats stats
CROSS APPLY sys.dm_exec_sql_text(stats.sql_handle) 
ORDER BY last_execution_time

以下是它的外观:

enter image description here


0

0
我会使用触发器或第三方软件,如Red Gate来检查您的SQL日志文件。

Red Gate Log Rescue只提供插入、更新和删除操作的恢复功能。 - Forgotten Semicolon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接