loggingSQL Server 2008 Express数据库上的所有查询?
有没有办法告诉SQL Server 2008 Express将每个查询(包括每个SELECT Query!)都logging到一个文件中?
这是一个开发机器,所以日志Select-Queries的负面影响不是问题。
之前有人build议使用SQL事件探查器:这不是在Express中可用(没有人知道,如果它是可用的networking版?),我正在寻找一种方式来logging查询,即使当我不在。
SQL Server Profiler:
- 文件 – >新追踪
- 显示“常规”选项卡。
- 在这里你可以select“保存到文件:”,以便它logging到文件中。
- 查看“事件select”选项卡
- select您想要logging的项目。
- TSQL-> SQL:BatchStarting会让你sqlselect
- 存储过程 – > RPC:完成会让你存储过程。
来自Microsoft的更多信息:SQL Server 2008联机丛书 – 使用SQL Server Profiler
更新 – SQL Express版本:
有人评论说,MS SQL Server Profiler不适用于快速版本。
似乎有一个自由的select: 用于Microsoft SQL Server 2005 Express Edition的Profiler
…迟到的答案,但我希望这将有助于其他读者在这里…
使用带有高级审计要求的SQL Server Express并不是真正的最佳select,除非它仅在开发环境中。
您可以使用trace(www.broes.nl/2011/10/profiling-on-sql-server-express/)来获取所需的数据,但是您必须自己parsing这些数据。
有第三方工具可以做到这一点,但他们的成本会相当高。 来自ApexSQL的日志资源pipe理器可以logging所有内容,但selectIdera的合规性pipe理器也会loggingselect语句,但成本要高得多。
还有一种方法可以获取有关在此处描述的MS SQL Server Express上执行的查询的信息: http : //blog.sqlauthority.com/2008/01/03/sql-server-2005-last-ran-query-最近-RAN查询/
简而言之,它对系统表执行智能查询,并获取关于查询(或caching的查询计划,如果需要)的信息(文本,时间执行)。 因此,您可以在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
您可以logging更改。 SQL Server 2008将使变更数据捕获变得非常容易。 但是,SQL Server不擅长loggingSELECT。
分析器在理论上是可能的,但它会杀死你的性能。 您可能会在桌面上“摆脱困境”,但是我认为您会发现您的机器运转缓慢而导致问题。 而且在任何一种部署之后肯定都不行。
其他人已经错过了一个重要的观点:除非2008年他们改变了一些我没有听说的东西,否则你不能触发一个SELECT。
为了logging,我将提示使用DataWizard的SQL Performance Profiler作为一个单独的答案,因为它与SQL Server Profiler的答案确实是相反的。
有14天的免费试用期,但即使你需要购买,3台服务器也只有20美元(撰写时,2012年6月28日)。 考虑到成千上万使用SQL Server Express版本的人已经保存了,这似乎对我来说比较公平。
我目前只使用了这个试用版,它提供了OP正在寻找的内容:一种跟踪进入特定数据库的所有查询的方法。 它还提供了将跟踪导出到XML文件。 付费版本提供了一些更多的function,但我还没有尝试过。
免责声明:我只是另一个开发人员不时与数据库混淆,我不隶属于DataWizard。 我只是偶然喜欢他们的工具,并想让人们知道它的存在,因为它帮助我分析了我的SQL Server Express安装。
我要么使用触发器,要么使用第三方软件(如Red Gate)来检查你的SQL日志文件。