SQL Server自动重启后启用profiler / Traceon

时间:2009-11-09 09:38:20

标签: sql-server-2005

我的客户在使用我们的应用程序时遇到了一些死锁。我想跟踪我研究的所有死锁并解决僵局。

我目前正在运行事件死锁图的SQL分析器来捕获死锁场景。

实际问题是SQL服务器每天凌晨2点重新启动,并且探查器在重新启动后停止捕获事件。当我在上午10点开始上映时,我可以在凌晨2点到10点之间错过我的错误。所以我正在寻找一种方法,这样我就可以在没有手动启动的情况下捕获死锁。

我以为我可以使用TRACEON(1204,-1),以便在SQL Server错误日志中捕获死锁事件。但是我发现重启后TRACE捕获也被禁用了。

有没有办法可以通过SQL分析器或使用TRACEON捕获死锁,而无需手动启动捕获?

尼基尔

2 个答案:

答案 0 :(得分:0)

不是运行跟踪或担心停机后这些特定时间之间遗漏的内容,而是询问客户端应用程序返回的错误。如果它们位于应用程序中的特定区域,您应该能够跟踪导致死锁的语句。只是我的意见=)。

答案 1 :(得分:0)

这里的派对有点迟了,但您可以创建一个存储过程来建立您的跟踪,然后将其设置为在启动时运行。

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及更高版本支持跟踪。