반응형
/**********************************************************************************************
-- Title : [2k] 추적 블랙박스 만드는 방법

-- Reference : 웹검색
-- Key word : fn_trace_getinfo, sp_trace_setstatus, sp_trace_create
**********************************************************************************************/
 /*
-- blackbox_trace 프로시저 생성
*/
USE master
GO

IF EXISTS (SELECT * FROM dbo.sysobjects
           WHERE id = object_id(N'[dbo].[trace_blackbox]')
           AND OBJECTPROPERTY(id, N'IsProcedure') = 1
          )
  DROP PROC [dbo].[trace_blackbox]
GO

CREATE PROC trace_blackbox
  @on int = 2
AS
/* IF no argument is passed to the @on parameter then get the current blackbox trace status.
   IF @on is zero then stop AND delete the blackbox trace.
   IF @on is one then create AND start the blackbox trace.
*/

  SET NOCOUNT ON

  DECLARE @traceid int
  DECLARE @blackboxstatus int
  DECLARE @dir nvarchar(80)

  SET @traceid = 0
  SET @blackboxstatus = 0

  SELECT @traceid = traceid FROM :: fn_trace_getinfo(0)
  WHERE property = 1
  AND value = 8

  IF @on = 0 AND @traceid > 0
  BEGIN
    SELECT @blackboxstatus = CAST(value AS INT)
    FROM :: fn_trace_getinfo(0)
    WHERE traceid = @traceid
    AND property = 5
   
    IF @blackboxstatus > 0
      EXEC sp_trace_setstatus @traceid, 0 --stop blackbox trace

    EXEC sp_trace_setstatus @traceid, 2   --delete blackbox trace definition
  END

  IF @on = 1
  BEGIN
    IF @traceid < 1
      EXEC sp_trace_create @traceid OUTPUT, 8 --create blackbox trace
   
    EXEC sp_trace_setstatus @traceid, 1       --start blackbox trace
  END

  SET @traceid = 0
  SET @blackboxstatus = 0

  SELECT @traceid = traceid
  FROM :: fn_trace_getinfo(0)
  WHERE property = 1
  AND value = 8

  SELECT @blackboxstatus = CAST(value AS INT)
  FROM :: fn_trace_getinfo(0)
  WHERE traceid = @traceid
  AND property = 5

  IF @traceid > 0 AND @blackboxstatus > 0
  BEGIN
    SELECT @dir = CAST(value AS NVARCHAR(80))
    FROM :: fn_trace_getinfo(0)
    WHERE traceid = @traceid
    AND property = 2
   
    PRINT 'The blackbox trace is running AND the trace file is in the following directory.'
    PRINT @dir + '.trc'
  END
  ELSE
    PRINT 'The blackbox trace is not running.'
GO
 

/*
-- 쿼리분석기에서 다음의 SP를 수행
*/
EXEC trace_blackbox 1   --start
GO
 

/*
-- 문제가 발생할 때까지 기다렸다가 문제가 발생하면 명령프롬프트에서 sqldiag 수행
*/
--  만약 Path가 맞지 않을 경우는
--
--  C:\Program Files\Microsoft SQL Server\MSSQL\Binn(기본)으로 이동하시어 SqlDiag를 실행.
 
 
/*
-- 쿼리분석기에서 아래의 SP를 실행
*/
EXEC trace_blackbox 0   --stop
GO
 
--  그러면 SP와 sqldiag의 수행결과로
--
--  C:\Program Files\Microsoft SQL Server\MSSQL\LOG(기본)
--
--  디렉토리에 다음의 2개의 파일이 생성됩니다.
--
--  Sqldiag.trc
--
--  Sqldiag.txt
--
--  C:\Program Files\Microsoft SQL Server\MSSQL\Data(기본)
--
--  디렉토리에 다음의 1개의 파일이 생성됩니다.
--
--  Blackbox.trc

EXEC trace_blackbox 1 --start
GO

EXEC trace_blackbox
GO
 

/*
-- 명령프롬프트에서 sqldiag
*/
EXEC trace_blackbox 0 --stop
GO
반응형

+ Recent posts