반응형
CREATE PROC blackbox
AS
DECLARE @TraceID INT

EXEC sp_trace_create @TraceID OUTPUT, 8
EXEC sp_trace_setstatus @TraceID, 1
RETURN
GO
EXEC sp_procoption blackbox, 'startup', 'on'
GO




--=========================================================================

blackbox는 SQL 서버에 보내진 마지막 5MB 분량의 T-SQL 문장을 가진 특별한 추적 파일로

추적 정보를 \Data 디렉터리의 blackbox.trc 파일에 추가하도록 추적을 정의합니다.

추적이 시작되면 파일 크기가 5MB에 도달할 때까지 추적 정보가 blackbox.trc 파일에 기록됩

니다. 그런 다음 추적은 다른 추적 파일인 blackbox_1.trc를 만들고 추적 정보를 새 파일에 기록

합니다. blackbox_1.trc의 크기가 5MB가 되면 추적이 blackbox.trc로 전환됩니다. 따라서 항상

최고 5MB의 추적 정보를 사용할 수 있습니다.


SQL 서버가 명확하지 않은 이유로 갑자기 죽을경우 blackbox 추적을 통해 문제해결의 실마리

를 찾을 수 있을것입니다.

 

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trace_blackbox]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[trace_blackbox]
GO

CREATE PROCEDURE trace_blackbox (
 @on int = 2 
)
AS
Begin
 DECLARE @traceid int
 DECLARE @blackboxstatus int
 DECLARE @dir nvarchar(80)

 SET @traceid = 0
 SET @blackboxstatus = 0
 SET NOCOUNT ON


 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
     
  --stop blackbox trace
  IF @blackboxstatus > 0 
   exec sp_trace_setstatus @traceid,0 
     
  --delete blackbox trace definition 
  exec sp_trace_setstatus @traceid,2 
   END

 -- 추적을 시작
 IF @on = 1
  BEGIN
   --create blackbox trace
   IF @traceid < 1 exec sp_trace_create @traceid OUTPUT, 8
   
   --start blackbox trace
   exec sp_trace_setstatus @traceid,1 
  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))+'.trc' FROM :: fn_trace_getinfo(0) 
   WHERE traceid = @traceid and property = 2
      
   SELECT 'The blackbox trace is running and the trace file is in the following directory.' MESSAGE
      
   SELECT @dir FileName
  END
 ELSE 
  SELECT 'The blackbox trace is not running.' MESSAGE

 SET NOCOUNT OFF

End

 

/*
To start the blackbox trace, type the following command in a SQL Server Query Analyzer window: 
trace_blackbox 1
    
To check the status of the blackbox trace, issue the following command: 
trace_blackbox
    
To stop the blackbox trace, issue the following command: 
trace_blackbox 0
*/


반응형

'연구개발 > DBA' 카테고리의 다른 글

연습문제  (0) 2012.01.16
테이블의 행 구조  (0) 2012.01.16
테이블 변수 vs 임시 테이블  (0) 2012.01.09
Admin::Started with SQL Server (서비스시작) 추적플래그 trace  (0) 2012.01.08
MSSQL CHECKPOINT  (0) 2012.01.08

+ Recent posts