Serach

2014년 3월 12일 수요일

SP 변경 이력 추적 쉽게 하기


오랜만에 블로그에 글을 쓰네요..

sql server 데이터베이스 작업중

SP가 빈번히 변경되는데 변경 이력 추적이 어려울때 사용하면 좋은 방법입니다.

물론 소스 관리 툴을 쓰는게 가장 좋은것 같고..

가장 간편하게 적용 할 수 있는 쿼리 입니다.

변경 이력을 추적할 데이터 베이스에서 해당 쿼리를 실행합니다.


CREATE TABLE dbo.SPLOG(
idx int IDENTITY(1,1) NOT NULL,
sp_name varchar(100) NULL,
division varchar(20) NULL,
SQLCMD varchar(max) NULL,
author varchar(20) NULL,
modified_date datetime NULL,
 CONSTRAINT XPKSPLOG PRIMARY KEY NONCLUSTERED
(
idx ASC
))

GO


먼저 위의 쿼리로 변경이력을 저장할 테이블을 만듭니다.




CREATE TRIGGER TRG_SPLOG ON DATABASE
FOR
CREATE_PROCEDURE, ALTER_PROCEDURE, DROP_PROCEDURE,
CREATE_VIEW, ALTER_VIEW, DROP_VIEW,
CREATE_FUNCTION, ALTER_FUNCTION, DROP_FUNCTION,
CREATE_TRIGGER, ALTER_TRIGGER, DROP_TRIGGER

AS

DECLARE @DATA XML

SET @DATA = EVENTDATA()

INSERT INTO DBO.SPLOG (sp_name, division, SQLCMD, author, modified_date)
VALUES
(@DATA.value('(/EVENT_INSTANCE/ObjectName)[1]', 'VARCHAR(100)'),
 @DATA.value('(/EVENT_INSTANCE/EventType)[1]', 'VARCHAR(100)'),
 @DATA.value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]', 'VARCHAR(MAX)'),
 HOST_NAME(),
 GETDATE())

다음은 위의 쿼리로 데이터베이스 트리거를 등록합니다.


트리거 등록 후에는 프로시저, 뷰, 펑션, 트리거를 만들거나 수정, 지우게 될 경우

이력이 SPLOG 테이블에 남게 됩니다.