在這裏稍稍晚點來參加派對,但是您可以創建一個存儲過程來建立跟蹤,然後將其設置爲在啓動時運行。
USE master;
GO
-- define the proc
CREATE PROCEDURE usp_MakeMyTraceAtStartup AS
DECLARE @TraceID INT;
DECLARE @on BIT = 1;
EXEC sp_trace_create @TraceID output, 6, 'c:\mypath\mytraceout.trc', 5, NULL;
-- event 25 is a deadlock; see http://msdn.microsoft.com/en-us/library/ms186265.aspx
EXEC sp_trace_setevent @TraceID, 25, 6, @on; -- NTUserName
EXEC sp_trace_setevent @TraceID, 25, 7, @on; -- NTDomainName
EXEC sp_trace_setevent @TraceID, 25, 8, @on; -- HostName
EXEC sp_trace_setevent @TraceID, 25, 10, @on; -- ApplicationName
EXEC sp_trace_setevent @TraceID, 25, 11, @on; -- LoginName
EXEC sp_trace_setevent @TraceID, 25, 12, @on; -- SPID
EXEC sp_trace_setevent @TraceID, 25, 14, @on; -- StartTime
EXEC sp_trace_setevent @TraceID, 25, 23, @on; -- Success
EXEC sp_trace_setevent @TraceID, 25, 26, @on; -- ServerName
EXEC sp_trace_setevent @TraceID, 25, 31, @on; -- Error
EXEC sp_trace_setevent @TraceID, 25, 35, @on; -- DatabaseName
EXEC sp_trace_setevent @TraceID, 25, 60, @on; -- IsSystem
EXEC sp_trace_setevent @TraceID, 25, 64, @on; -- SessionLoginName
-- whatever other columns you want to audit
-- turn it on
EXEC sp_trace_setstatus @TraceID, 1;
GO
-- set it to run automatically at startup
EXEC sp_procoption 'usp_MakeMyTraceAtStartup', 'startup', 'true';
GO
SQL Server 2005及更高版本支持跟蹤。
好吧,在這種情況下,我所得到的僅僅是受害者的SQL,也只是最高級的SQL正在執行。如果我得到一個死鎖圖,我可以很容易地找到哪個是導致死鎖的確切sql。例如,如果一個存儲過程調用另一個,然後再次調用另一個存儲過程,那麼發生死鎖的時候,我會使用分析器得到涉及死鎖的最內部的sql,但如果沒有它們,它們將不會相同。因此我真的很想找到蹤跡。 – Nikhil 2009-11-12 06:35:02