Xia*_*cia 17 sql-server sql-server-2008-r2
我想知道 SQL Server 2008 R2 是否有默认的SELECT
语句日志记录方案(或任何其他与此相关的 T-SQL)。
如果是,我在哪里可以看到它?如果没有,我该如何设置?
Nat*_*lly 19
默认情况下,不会以您期望的方式记录 SQL Server 活动。一些写入活动记录在事务日志中,但这也取决于您的数据库是如何设置的。
在服务器上跟踪 SELECT 活动有四个主要选项:
您可以使用SQL Server Profiler连接到您的服务器并在特定活动发生时对其进行监视。
您可以创建服务器端跟踪以将活动记录到服务器上的跟踪文件中,然后可以由 SQL Server Profiler 读取,或者使用fn_trace_gettable将其加载到表中以供进一步分析。
您可以使用Extended Events,它提供比服务器端跟踪更多的功能,并且 Microsoft 建议使用它来代替从 SQL Server 2012 开始的服务器端跟踪。
您可以使用C2 审计模式。
您可以使用 SQL Server Profiler 设置跟踪(选择所需的特定事件、过滤器等),然后使用 File 菜单编写脚本并在服务器上执行它以创建服务器端跟踪,如所述在这里。
只要您不关心谁运行了查询,就有一些方法可以查看有关系统中正在运行的查询的指标。这仅限于自上次重新启动以来的数据,并且可能受到计划缓存(或其他内存)压力的影响,具体取决于您扩展查询的深度。
;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%';
Run Code Online (Sandbox Code Playgroud)
您可能想要扩展模式 - 例如,这将忽略以 开头的查询,具有;WITH
讽刺意味的是,可以捕获SELECT INTO
甚至不引用实际表的变量赋值。
但是,如果您需要比这更详细的信息,Nathan 的回答是一个好的开始(除非您要使用跟踪,否则不要使用 Profiler)。请记住,记录针对您的系统的每个查询都不是免费的。
小智 5
有多种 SQL Server 解决方案和技术可用于跟踪 SELECT 语句
专门开发的存储过程和函数 - 注意:此方法需要 T-SQL 编程的高级知识和存储过程和函数的额外维护(例如,在数据库模式更改的情况下)。你可以在这篇文章中看到更多:http : //alstechtips.blogspot.com/2011/02/auditing-select-statements-in-sql.html
SQL Server 跟踪技术 - 您可以阅读本文中的分步说明:http : //solutioncenter.apexsql.com/auditing-select-statements-on-sql-server/
使用 SQL Server 审核功能 - 审核功能(在 SQL Server 2008 中引入)可以跟踪服务器和数据库事件,并且正在使用扩展事件技术。但是,只有 SQL Server Developer 和 Enterprise 版本支持数据库级审计。
使用第三方工具,如 ApexSQL Audit 或 Idera SQL Compliance Manager
归档时间: |
|
查看次数: |
51251 次 |
最近记录: |