[MSSQL] 프로시저 자동 백업.

프로시저를 수정하다보면 간혹 실수를 하거나 이전 구문으로 복원을 해야할 때 가있다.

데이터베이스에 트리거를 등록해두고

프로시저에 CREATE나 ALTER등이 될 때 마다 소스를 지정한 테이블에 백업하는 방법이다.

 

CREATE TABLE dbo.SPLOG(
 idx bigint 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 테이블에 이력이 남게될 것이다.

 

Post Author: 김 키티

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다