监视SQL Server

时间:2018-04-05 12:34:16

标签: sql-server

有没有办法监控SQL Server中的特定SQL查询?

例如,当某人针对数据库运行特定查询时,我希望以某种方式得到通知。例如:

Select * 
from table 
where id = 1

谢谢!

1 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点。我可能会从审计开始。创建服务器审核。

USE [master] GO

USE [master]
GO
CREATE SERVER AUDIT [audit_stackoverflow_question]
TO APPLICATION_LOG
WITH (QUEUE_DELAY = 1000, ON_FAILURE = FAIL_OPERATION)
ALTER SERVER AUDIT [stack] WITH (STATE = OFF)
GO

创建数据库审计规范。

USE [<your_database>]
GO
CREATE DATABASE AUDIT SPECIFICATION [audit_monitor_dbo.table]
FOR SERVER AUDIT [audit_stackoverflow_question]
ADD (SELECT ON OBJECT::[dbo].[table] BY [public])
WITH (STATE = OFF)
GO

准备好后启用审计和数据库审计规范。在此之后,将记录活动(在本例中为应用程序事件日志):

enter image description here

您可以将活动推送到文件。无论什么漂浮你的船。之后,您可以在Powershell中删除您想要查看的任何特定活动。

您也可以使用扩展事件或跟踪,但我认为审核是可行的方法。

如果你正在照看这个事实,请检查缓存表:

SELECT t.[text]
, *
FROM sys.dm_exec_cached_plans AS p
CROSS APPLY sys.dm_exec_sql_text(p.plan_handle) AS t
WHERE t.[text] LIKE N'Select%from%table%where%id%'
OPTION (recompile);