为了账号安全,请及时绑定邮箱和手机立即绑定

如何在SQL Server Management Studio中查看查询历史记录

如何在SQL Server Management Studio中查看查询历史记录

ITMISS 2019-09-19 15:11:17
查询历史记录是否存储在某些日志文件中?如果是的话,你能告诉我如何找到他们的位置吗?如果没有,你能就如何看待它给我任何建议吗?
查看完整描述

3 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

正如其他人所说,您可以使用SQL事件探查器,但您也可以通过sp_trace_ *系统存储过程利用它的功能。例如,这个SQL片段(至少2000年;我认为对于SQL 2008是相同的,但你必须仔细检查)所有查询的catch RPC:Completed和SQL:BatchCompleted事件需要超过10秒才能运行,并将输出保存到您可以在以后在SQL事件探查器中打开的跟踪文件:


DECLARE @TraceID INT

DECLARE @ON BIT

DECLARE @RetVal INT

SET @ON = 1


exec @RetVal = sp_trace_create @TraceID OUTPUT, 2, N'Y:\TraceFile.trc'

print 'This trace is Trace ID = ' + CAST(@TraceID AS NVARCHAR)

print 'Return value = ' + CAST(@RetVal AS NVARCHAR)

-- 10 = RPC:Completed

exec sp_trace_setevent @TraceID, 10, 1, @ON     -- Textdata

exec sp_trace_setevent @TraceID, 10, 3, @ON     -- DatabaseID

exec sp_trace_setevent @TraceID, 10, 12, @ON        -- SPID

exec sp_trace_setevent @TraceID, 10, 13, @ON        -- Duration

exec sp_trace_setevent @TraceID, 10, 14, @ON        -- StartTime

exec sp_trace_setevent @TraceID, 10, 15, @ON        -- EndTime


-- 12 = SQL:BatchCompleted

exec sp_trace_setevent @TraceID, 12, 1, @ON     -- Textdata

exec sp_trace_setevent @TraceID, 12, 3, @ON     -- DatabaseID

exec sp_trace_setevent @TraceID, 12, 12, @ON        -- SPID

exec sp_trace_setevent @TraceID, 12, 13, @ON        -- Duration

exec sp_trace_setevent @TraceID, 12, 14, @ON        -- StartTime

exec sp_trace_setevent @TraceID, 12, 15, @ON        -- EndTime


-- Filter for duration [column 13] greater than [operation 2] 10 seconds (= 10,000ms)

declare @duration bigint

set @duration = 10000

exec sp_trace_setfilter @TraceID, 13, 0, 2, @duration

您可以在联机丛书中找到每个跟踪事件,列等的ID; 只搜索sp_trace_create,sp_trace_setevent和sp_trace_setfiler sprocs。然后,您可以按如下方式控制跟踪:


exec sp_trace_setstatus 15, 0       -- Stop the trace

exec sp_trace_setstatus 15, 1       -- Start the trace

exec sp_trace_setstatus 15, 2       -- Close the trace file and delete the trace settings

...其中'15'是跟踪ID(由sp_trace_create报告,第一个脚本在上面启动)。


您可以检查以查看正在运行的跟踪:


select * from ::fn_trace_getinfo(default)

我唯一要注意的是 - 我不知道这会给你的系统增加多少负载; 它会添加一些,但“some”的大小可能取决于服务器的繁忙程度。


查看完整回答
反对 回复 2019-09-19
  • 3 回答
  • 0 关注
  • 3851 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信