반응형
반응형

다음은 추적 스크립팅을 저장 프로시저화한 예제 스크립트입니다. 시스템의 환경에 적합하도록 수정 보완하여 활용하기 바랍니다.

 

n       추적을 시작하는 저장 프로시저의 예제 스크립트 : sp_trace_start

USE master

GO

CREATE PROCEDURE sp_trace_start @TraceFileName sysname=NULL,

@TraceName sysname='trace',

@Options int=2, -- TRACE_FILE_ROLLOVER

@MaxFileSize bigint=5,

@StopTime datetime=NULL,

@Events varchar(300)=

'10,12',

--  10 - RPC:Completed

--  12 - SQL:BatchCompleted

@Cols varchar(300)=

'1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,',

-- 모든 이벤트

@IncludeFilter sysname=NULL,

@ExcludeFilter sysname=NULL

AS

SET NOCOUNT ON

-- 변수 선언

DECLARE @TraceId int

DECLARE @On bit

DECLARE @Rc int

 

SET @On=1

 

-- 이벤트와 이벤트 열을 확인한다.

IF @Events IS NULL or @Cols IS NULL BEGIN

    PRINT 'No Events or Coloumns.'

    RETURN -1

END

 

-- 파일경로와 파일명을 설정한다.

IF @TraceFileName IS NULL

SELECT @TraceFileName = 'C:\Trace\Trace' + CONVERT(CHAR(8),getdate(),112)

 

-- 추적 큐를 만든다

EXEC @Rc =sp_trace_create @TraceId OUT, @Options, @TraceFileName, @MaxFileSize, @StopTime

IF @Rc<>0 BEGIN

    PRINT 'Trace not started.'

    RETURN @Rc

END

PRINT 'Trace started.'

PRINT 'The trace file name is '+@TraceFileName+'.'

 

-- 추적할 이벤트 클래스들과 이벤트 열들을 지정한다

DECLARE @i int, @j int, @Event int, @Col int, @Colstring varchar(300)

 

IF RIGHT(@Events,1)<>',' SET @Events=@Events+','

SET @i=CHARINDEX(',',@Events)

WHILE @i<>0 BEGIN

    SET @Event=CAST(LEFT(@Events,@i-1) AS int)

    SET @Colstring=@Cols

    IF RIGHT(@Colstring,1)<>',' SET @Colstring=@Colstring+','

    SET @j=CHARINDEX(',',@Colstring)

    WHILE @j<>0 BEGIN

        SET @Col=CAST(LEFT(@Colstring,@j-1) AS int)

        EXEC sp_trace_setevent @TraceId, @Event, @Col, @On

        SET @Colstring=SUBSTRING(@Colstring,@j+1 ,300)

        SET @j=CHARINDEX(',',@Colstring)

    END

    SET @Events=SUBSTRING(@Events,@i+1,300)

    SET @i=CHARINDEX(',',@Events)

END

 

-- 필터를 설정한다

EXEC sp_trace_setfilter @TraceId, 10, 0, 7, N'SQL Profiler'

EXEC sp_trace_setfilter @TraceId, 1, 0, 7,  N'EXEC% sp_%trace%'

 

IF @IncludeFilter IS NOT NULL

    EXEC sp_trace_setfilter @TraceId, 1, 0, 6, @IncludeFilter

 

IF @ExcludeFilter IS NOT NULL

    EXEC sp_trace_setfilter @TraceId, 1, 0, 7, @ExcludeFilter

 

-- 추적을 활성화한다

EXEC sp_trace_setstatus @TraceId, 1

 

-- 추적을 기록한다. (테이블 사용)

IF OBJECT_ID('tempdb..TraceQueueList') IS NULL BEGIN

    CREATE TABLE tempdb..TraceQueueList (TraceID int, TraceName varchar(20), TraceFile sysname)

END

 

IF EXISTS(SELECT * FROM tempdb..TraceQueueList WHERE TraceName = @TraceName) BEGIN

    UPDATE tempdb..TraceQueueList

    SET TraceID = @TraceId, TraceFile = @TraceFileName

    WHERE TraceName = @TraceName

END

ELSE BEGIN

    INSERT tempdb..TraceQueueList

VALUES(@TraceId, @TraceName, @TraceFileName)

END

 

RETURN 0

GO

 

/* 실행하기 */

EXEC sp_trace_Start

GO

 

[참고]

?         output 파일을 지정하지 않으면, “C:\Trace” 폴더 밑에 추적 파일이 생성됩니다.

?         스크립트를 직접 실행하려면, “C:\Trace” 폴더를 미리 생성해야 합니다.

?         추적 파일이 커질 수도 있으므로, output 파일이 생성되는 곳의 공간을 충분히 확보합니다.

?         원하는 이벤트와 이벤트 열은 번호로 설정합니다. 이벤트와 이벤트 번호는 온라인 설명서를 참조하십시오.

반응형

+ Recent posts

반응형