Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 SQL server重新启动后自动启用探查器/Traceon_Sql Server 2005 - Fatal编程技术网

Sql server 2005 SQL server重新启动后自动启用探查器/Traceon

Sql server 2005 SQL server重新启动后自动启用探查器/Traceon,sql-server-2005,Sql Server 2005,我的客户在使用我们的应用程序时遇到一些死锁。我想为我的研究追踪所有的死锁,并解决这些死锁 我目前正在为事件死锁图运行SQL事件探查器,以捕获死锁场景 实际问题是SQL server每天凌晨2点重新启动,而探查器在重新启动后停止捕获事件。当我到办公室时,比如说上午10点启动分析器,可能会出现死锁,我可能在凌晨2点到10点之间错过了。因此,我正在寻找一种方法,以便在不手动启动的情况下捕获死锁 我想我可以使用TRACEON(1204,-1),以便在SQL Server错误日志中捕获死锁事件。但我发现在

我的客户在使用我们的应用程序时遇到一些死锁。我想为我的研究追踪所有的死锁,并解决这些死锁

我目前正在为事件死锁图运行SQL事件探查器,以捕获死锁场景

实际问题是SQL server每天凌晨2点重新启动,而探查器在重新启动后停止捕获事件。当我到办公室时,比如说上午10点启动分析器,可能会出现死锁,我可能在凌晨2点到10点之间错过了。因此,我正在寻找一种方法,以便在不手动启动的情况下捕获死锁

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

是否有一种方法可以通过SQL profiler或使用TRACEON捕获死锁,而无需手动启动捕获


Nikhil

与其运行跟踪,或者担心停机后的特定时间内遗漏了什么,不如询问客户机应用程序返回了什么错误。如果它们位于应用程序中的特定区域,您应该能够跟踪导致死锁的语句。Just my opinion=)。

在这里参加聚会有点晚,但是您可以创建一个存储过程来建立跟踪,然后将其设置为在启动时运行

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,但如果没有它们,则无法获得相同的sql。因此,我真的很想找到线索。