记录查询和其他T-SQL


14

我想知道SQL Server 2008 R2是否具有用于SELECT语句的默认日志记录方案(或任何其他T-SQL)。

如果是,我在哪里可以看到?如果没有,我该如何设置?

Answers:


18

默认情况下,SQL Server活动未按照您期望的方式记录。事务日志中记录了一些写活动,但这也取决于数据库的设置方式。

跟踪服务器上的SELECT活动有四个主要选项:

  1. 您可以使用SQL Server Profiler连接到服务器,并监视发生的特定活动。

  2. 您可以创建服务器端跟踪以将活动记录到服务器上的跟踪文件中,然后可以通过SQL Server Profiler读取该文件,也可以使用fn_trace_gettable将其加载到表中以进行进一步分析。

  3. 您可以使用扩展事件,它提供的功能比服务器端跟踪更多,Microsoft推荐使用扩展事件,而不是从SQL Server 2012开始的服务器端跟踪。

  4. 您可以使用C2审核模式

您可以使用SQL Server Profiler来设置跟踪(选择所需的特定事件,过滤器等),然后使用“文件”菜单将其脚本化并在服务器上执行以创建服务器端跟踪,如下所述在这里


5

有几种SQL Server解决方案和技术可用于跟踪SELECT语句

  1. 专门开发的存储过程和功能–注意:此方法需要具备T-SQL编程的高级知识以及对存储过程和功能的额外维护(例如,在数据库模式更改的情况下)。您可以在本文中看到更多信息:http : //alstechtips.blogspot.com/2011/02/auditing-select-statements-in-sql.html

  2. SQL Server跟踪技术-您可以阅读本文中的分步说明:http : //solutioncenter.apexsql.com/auditing-select-statements-on-sql-server/

  3. 使用SQL Server审核功能-审核功能(在SQL Server 2008中引入)可以跟踪服务器和数据库事件,并且正在使用扩展事件技术。但是,仅SQL Server Developer和Enterprise版本支持数据库级别的审核。

  4. 使用第三方工具,例如ApexSQL Audit或Idera SQL Compliance Manager


3

默认情况下,它不记录SELECT语句。您可以在这里参考我的答案以获取更多详细信息,以审计SELECT语句。

另外,默认情况下,它甚至不记录T-SQL语句,而是记录事件,例如服务器内存更改,审核登录失败,审核Addlogin事件等,您可以在此处找到更多信息以及从中提取信息的T-SQL脚本。默认跟踪。


3

只要您不关心谁运行查询,就可以通过某些方式查看有关系统中正在运行的查询的指标。这仅限于自上次重新启动以来的数据,并可能受计划缓存(或其他内存)压力的影响,具体取决于您扩展查询的深度。

;WITH x AS
(
  SELECT 
    [text] = SUBSTRING(t.[text], 
      (s.statement_start_offset/2)+1, 
      COALESCE(NULLIF(s.statement_end_offset,-1),DATALENGTH(t.[text])*2)
       -(s.statement_start_offset/2)), 
    s.execution_count, s.last_execution_time,
    s.max_logical_reads, s.max_elapsed_time
  FROM sys.dm_exec_query_stats AS s
  CROSS APPLY sys.dm_exec_sql_text(s.sql_handle) AS t
)
SELECT * FROM x
WHERE LTRIM([text]) LIKE 'SELECT%';

您可能需要扩展模式-例如,这将忽略以开头的查询,具有;WITH讽刺意味的是,它可以捕获SELECT INTO甚至引用不引用实际表的变量分配。

但是,如果您需要的不是这些,则Nathan的答案是一个好的开始(除非您要使用trace,否则请不要使用Profiler)。请记住,针对您的系统记录每个查询并不是免费的。


我同意以上声明,在监视数据库中的所有select声明时我会非常谨慎。
Zane 2013年

我尝试了您的解决方案-是否有可能仅提供过程,函数和触发器,而没有任何即席执行的sql语句?
马吉尔

@Magier否,sys.dm_exec_query_stats仅应报告查询语句(临时或来自模块)。
亚伦·贝特朗
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.