반응형
/**********************************************************************************************
-- 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
-- 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
반응형