使用 sql server 默認跟蹤分析執行的 SQL 語句


如果沒有啟用 SQL SERVER 的跟蹤器來跟蹤 SQL SERVER 的 SQL 執行情況,又想查最近的 SQL 執行情況,網上一般說是使用 LogExprorer 這個工具,網上找了這個工具很久也沒有找到。

 

今天找了到了一篇文章,原因 SQL SERVER 現在有個默認跟蹤文件,默認情況下,是啟用了 SQL 的跟蹤:

https://www.cnblogs.com/DBFocus/archive/2010/05/19/1739535.html

 

首先使用 select * from sys.configurations where configuration_id = 1568 查一下是否默認有打開默認跟蹤,我查詢了幾台服務器,默認都是打開的,說明這個功能默認是打開的。

如果沒有打開,就使用:

sp_configure 'show advanced options', 1;
go
reconfigure;
go
sp_configure 'default trace enabled', 1;
go
reconfigure;
go

來打開。

 

使用 select * from ::fn_trace_getinfo(0) 可以獲取跟蹤文件保存的路徑,默認跟蹤的數據保存在文件中。

 

使用以下語句查詢相關的信息:

select * from from ::fn_trace_gettable('C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\log.trc',0)

 

整理一個:

select
loginname,
loginsid,
spid,
hostname,
applicationname,
servername,
databasename,
objectname,
e.category_id,
cat.name as [CategoryName],
textdata,
starttime,
eventclass,
eventsubclass, --0表示begin,1表示commit
e.name as EventName
from ::fn_trace_gettable('C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\log.trc',0)
inner join sys.trace_events e
on eventclass = trace_event_id
inner join sys.trace_categories as cat
on e.category_id = cat.category_id
where databasename = 'TraceDB' and
objectname is null and --根據objectname來過濾
e.category_id = 5 and --category 5表示對象
e.trace_event_id = 46 --trace_event_id: 46表示Create對象,47表示Drop對象,164表示修改對象

 

 

查詢修改表的信息:

where databasename = 'TraceDB' and
objectname = 'MyTable' and
e.category_id = 5 and
e.trace_event_id = 164

 

查義刪除表的信息:

where databasename = 'TraceDB' and
objectname = 'MyTable' and
e.category_id = 5 and
e.trace_event_id = 47

 

 

Default Trace還能跟蹤到其他一些事件。例如你的日志文件快速增長,這時需要知道其原因。Default Trace會捕獲日志增長事件,這對於排查問題很有價值。下面的查詢會獲得Default Trace中所有的log auto growth事件。

select
loginname,
loginsid,
spid,
hostname,
applicationname,
servername,
databasename,
objectname,
e.category_id,
cat.name,
textdata,
starttime,
endtime,
duration,
eventclass,
eventsubclass,
e.name as EventName
from ::fn_trace_gettable('C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\log.trc',0)
inner join sys.trace_events e
on eventclass = trace_event_id
inner join sys.trace_categories as cat
on e.category_id = cat.category_id
where databasename = 'TraceDB' and
e.category_id = 2 and --categroy 2表示database
e.trace_event_id = 93 --93表示日志文件自動增長事件

 

與跟蹤相關的函參考:

https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008-r2/ff848738(v=sql.105)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM