none
MS SQL Server 임의의 Trace 생성 RRS feed

  • 질문

  • MS SQL Server에서 임의의 Trace를 생성해서  Session의 로그 기록 정보를 제공하는 방법을 알려주세요.

    2011년 11월 11일 금요일 오전 7:54

답변

  • 안녕하십니까? 김도남 님

    Microsoft TechNet Forum 사이트를 방문해 주셔서 감사합니다.

     

    문의 하신 “MS SQL Server  임의의 Trace 생성에 대한 답변을 드리겠습니다.

     

    서버에서 세션 ID를 이용해서 해당 세션이 작업하는 내역을 확인할 수 있습니다.

     

    Step 1 : 로그 기록 시작

     

     

    아래는 SPID를 인자로 받아 그 SPID BacthCompleted Event 발생시 그 이벤트 로그를 기록을 합니다.

     

    CREATE PROCEDURE [dbo].[spTraceStart]

     

           @spid INT

          

    AS

     

    DECLARE @rc INT

    DECLARE @TraceID INT

    DECLARE @maxfilesize bigint

    SET @maxfilesize = 5 

    DECLARE @filename NVARCHAR(245)

     

    SET @filename = 'C:\Trace_' 

        + CONVERT(NVARCHAR(10),@spid) 

        + '_d' 

        + REPLACE(CONVERT(VARCHAR, GETDATE(),111),'/','')

        + REPLACE(CONVERT(VARCHAR, GETDATE(),108),':','')

     

     

     

    --Trace 인스턴스를 생성을 합니다.

    --로그를 기록하는 파일의 최대 용량에 도달하면 종료하고 종료시간은 설정하지 않습니다.

     

    EXEC @rc = sp_trace_create @TraceID output, 2, @filename, @maxfilesize, NULL 

     

     

    IF (@rc != 0) GOTO error

     

     

     

    DECLARE @on bit

    SET @on = 1

     

     

    --SQL:BatchCompleted Event 발생할 경우 로그를 작성을 합니다.

    --기록하는 내용은 TextData, TransactionID, SPID, StartTime, EndTime 입니다.

     

    EXEC sp_trace_setevent @TraceID, 12, 1, @on

     

    EXEC sp_trace_setevent @TraceID, 12, 4, @on

     

    EXEC sp_trace_setevent @TraceID, 12, 12, @on

     

    EXEC sp_trace_setevent @TraceID, 12, 14, @on

     

    EXEC sp_trace_setevent @TraceID, 12, 15, @on

     

     

    DECLARE @intfilter INT

    DECLARE @bigintfilter bigint

     

     

    --Trance 필터를 적용을 합니다.

    -- 필터는 중지된 Trance 적용을 있습니다.

    --설정된 SPID 동일한 BatchCompleted Event 로그에 기록이 됩니다.

     

    EXEC sp_trace_setfilter @TraceID, 12, 1, 0, @spid

     

     

    --현재 Trance 실행합니다.

     

    EXEC sp_trace_setstatus @TraceID, 1

     

     

    SELECT TraceID=@TraceID

     

     

    GOTO finish

     

     

    exec sp_who

     

     

    error: 

    SELECT ErrorCode=@rc

     

    finish:

     

     

     

    Step 2 : 로그 기록 중지

     

     

    아래의 Procedure TranceID를 인자로 받아 작업을 중지 합니다.

     

    CREATE PROCEDURE [dbo].[spTraceStop] @traceId int

    AS

    EXEC sp_trace_setstatus @traceId,0

    EXEC sp_trace_setstatus @traceId,2

     

     

     

    Step 3 : 사용

     

    Exec sp_who 명령을 사용해서 SPID를 확인할 수 있습니다.

     

     

     

    아래의 명령어로 작성한 시작 Procedure를 실행을 합니다 .

     

    exec spTraceStart 59

     

     

    아래의 Script를 실행해서 BatchCompleted Event를 발생을 합니다.

     

    select * from dbo.spt_monitor

     

    select * from dbo.spt_values

     

     

     

    아래의 명령어로 작성한 종료 Procedure를 실행을 합니다.

     

    exec spTraceStop 2

     

     

    로그 기록 확인

     

     

     

    BatchCompleted Event에 내용을 확인할 수 있습니다.

     

     

    참고 자료

     

    sp_trace_create(Transact-SQL)

    http://msdn.microsoft.com/ko-kr/library/ms190362.aspx

     

    sp_trace_setevent (Transact-SQL)

    http://msdn.microsoft.com/en-us/library/ms186265.aspx

     

    sp_trace_setstatus(Transact-SQL)

    http://msdn.microsoft.com/ko-kr/library/ms176034.aspx

     

    제가 문제에 대해 더 알아야 할 것이 있다면 응답 주시면 감사하겠습니다.

    제시해 드린 답변이 도움이 되었기를 바랍니다.

     

    • 답변으로 표시됨 김도남 2011년 11월 16일 수요일 오전 9:01
    2011년 11월 15일 화요일 오전 5:41
    중재자