【问题标题】:Logging ALL Queries on a SQL Server 2008 Express Database?在 SQL Server 2008 Express 数据库上记录所有查询?
【发布时间】:2008-09-23 20:50:25
【问题描述】:

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

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

在有人建议使用 SQL Profiler 之前:这在 Express 中不可用(有谁知道它在 Web 版中是否可用?)我正在寻找一种方法来记录查询,即使我不在。

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    SQL Server 探查器:

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

    来自 Microsoft 的更多信息:SQL Server 2008 联机丛书 - Using SQL Server Profiler

    更新 - SQL Express 版:

    有评论指出 MS SQL Server Profiler 不适用于快速版。
    似乎确实有一个免费的替代方案:Profiler for Microsoft SQL Server 2005 Express Edition

    【讨论】:

    • 我没有亲自尝试过,但这里是:Profiler for Microsoft SQL Server 2005 Express Edition sqlprofiler.googlepages.com
    • 明天上班时,我将尝试针对 mssql 2008 的替代程序。
    • 我建议的工具目前不支持 2008,但我下载了源代码,更新了项目引用以引用 2008 sdk,然后应用程序工作了。我已经给维护者发了邮件,要求他更新项目。
    • 更新:(1.) 该工具似乎不支持将日志保存到文件。 (2.) 如果您需要帮助获取源代码并更新工具以供您使用,请发送电子邮件至 kylelanser@yahoo.ca
    • 他们现在似乎在为 SQL Profiler Express 收费,旧版本在打开时关闭,声称有新版本可用...
    【解决方案2】:

    还有另一种方法可以获取有关已在 MS SQL Server Express described here 上执行的查询的信息。

    简而言之,它对系统表运行智能查询并获取有关查询(或缓存的查询计划,如果需要)的信息(文本,执行时间)。因此,您可以在 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
    

    【讨论】:

      【解决方案3】:

      …迟到的答案,但我希望它对这里的其他读者有用…

      将 SQL Server Express 与诸如此类的高级审计要求一起使用并不是真正的最佳选择,除非它仅在开发环境中使用。

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

      有第三方工具可以做到这一点,但它们的成本会相当高。 ApexSQL 的Log explorer 可以记录除 select 之外的所有内容,Idera’s 合规经理也会记录 select 语句,但成本要高得多。

      【讨论】:

      • SQL Server 2014 Express 附带的探查器是否改进了这一点?
      【解决方案4】:

      您可以记录更改。 SQL Server 2008 将通过变更数据捕获使这变得特别容易。但是 SQL Server 不太擅长记录 SELECT。

      探查器理论上是可行的,但它会影响您的性能。您可能会在桌面上“侥幸逃脱”,但我认为您会注意到您的机器运行缓慢,足以引起问题。而且在任何类型的部署之后它肯定都不起作用。

      其他几个人已经错过了一个重要的点:除非他们在 2008 年改变了一些我没有听说过的东西,否则你不能触发 SELECT。

      【讨论】:

      • 谢谢。好吧,这是一台开发机器,所以如果我可以打开/关闭该功能,性能就不是问题。无论如何,在生产环境中捕获选择似乎是灾难的根源。
      【解决方案5】:

      为了记录,我将使用DataWizard's SQL Performance Profiler 作为单独答案的提示包括在内,因为它与answer pointing at SQL Server Profiler 完全相反。

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

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

      免责声明:我只是不时搞数据库的另一个开发人员,我与 DataWizard 没有任何关系。我碰巧喜欢他们的工具,并想让人们知道它的存在,因为它帮助我分析了我的 SQL Server Express 安装。

      【讨论】:

      • 当一家公司决定采用以前开源和免费的产品,然后完全埋没免费版本出售它时,这让我很不爽。我理解将时间投入到一个项目中并希望将其货币化。但是不要把旧版本放在那里,不要在你停用某人的工作安装的地方拉一个 Red-Gate (.Net Reflector)。我只使用 Anjlab,因为它是免费的。如果我要花 20 美元购买一个工具,我想我宁愿花 50 美元购买包含 SQL Profiler 和 SQL Server 提供的几乎所有其他功能的 SQL Server Developer Edition。
      • @Sam:感谢您的评论。我不知道有一个Developer Edition 的 SQL Server! 50 美元是一笔非常棒的交易。我同意你的观点,即旧版本的软件应该仍然可用。但是对于新用户,我真的不觉得痛苦。他们要么买,要么不买。
      【解决方案6】:

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

      【讨论】:

      • Red Gate Log Rescue 只提供插入、更新和删除。
      【解决方案7】:

      看来你可以使用T-SQL创建跟踪

      http://support.microsoft.com/kb/283790/

      这可能会有所帮助。

      【讨论】:

        猜你喜欢
        • 2011-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-22
        • 2011-05-06
        • 1970-01-01
        相关资源
        最近更新 更多