본문 바로가기
DataBase/MsSql

MSSQL DDL Trigger 사용법 및 특징

by 아우럼 2024. 6. 13.
반응형

DDL Trigger는 SQL SERVER의 스키마 변경에 대한 이력을 관리하거나 변경하지 못하게 하는 경우 주로 사용합니다.
예를 들면 테이블 변경 이력이 필요한 경우 DDL Trigger 사용합니다.

 

DDL Trigger 특징.

  • 다양한 DDL(데이터 정의 언어) 이벤트에 대한 응답으로 DDL Trigger를 사용합니다.
  • CREATE, ALTER, DROP, GRANT, DENY, REVOKE 시작하는 Transact-SQL 문에서 DDL Trigger를 사용할 수 있습니다.
  • DDL Trigger는 특정 사용자가 데이터베이스 스키마에 대한 변경을 시도할 때 변경을 방지할 수 있습니다.
  • DDL Trigger는 데이터베이스 스키마에 대한 변경 이력을 관리할 때 매우 유용하게 사용합니다.

DDL Trigger 문법.

Syntax.

CREATE TRIGGER trigger_name
ON { DATABASE |  ALL SERVER}
[WITH ddl_trigger_option]
FOR { event_type | event_group }
AS 
    { T-sql 문장}

문법 설명입니다.

  • trigger_name: 생성되는 Trigger 이름입니다.
  • ON 절 옵션은 데이터베이스는 데이터베이스 또는 모든 서버 범위 이벤트에 대해 Trigger를 실행하도록 지정합니다.
  • ddl_trigger_option은 Encryption 또는 EXECUTE AS 절을 지정할 수 있습니다. 
  • Encryption은 Trigger를 암호화할 수 있습니다.
  • EXECUTE AS는 Trigger가 실행되는 유저를 정의합니다.
  • event_type은 Trigger가 CREATE_TABLE, ALTER_TABLE 등을 설정하는 이벤트입니다.
  • event_group은 event_type의 그룹입니다.

DDL Trigger 사용법.

DDL Trigger 생성.

TABLE 변경 못 하게 하는 Trigger입니다.

USE sampleDB;
DROP TABLE IF EXISTS AurumGuide_DDL_Trigger;
-- Create Sample Table 
CREATE TABLE AurumGuide_DDL_Trigger(
   AurumId           varchar(100),
   loginTime         datetime 
);
go
-- TABLE 변경 금지.
CREATE TRIGGER TR_AurumGuide_DDL_Trigger   
ON DATABASE   
FOR DROP_TABLE, ALTER_TABLE   
AS   
   PRINT 'You must disable Trigger "AurumGuide_DDL_Trigger" to drop or alter tables!'   
   ROLLBACK;  
go
-- DROP TABLE
drop table AurumGuide_DDL_Trigger;

 

TABLE 변경 이력을 테이블 XML 형태로 저장하는 예제입니다.

 

-- 테이블 변경 이력.
CREATE TABLE dbo.AurumGuide_DDL_Trigger_Log(
	LogID int IDENTITY(1,1) PRIMARY KEY,     
	ChangeId   varchar(100),
	DateChanged datetime,
	EventInfo   xml NULL
);
-- 트리거 생성
ALTER TRIGGER TR_AurumGuide_DDL_Trigger_Log
ON DATABASE
FOR	
	CREATE_TABLE,
	ALTER_TABLE, 
	DROP_TABLE
AS
BEGIN
	SET NOCOUNT ON;
	INSERT INTO dbo.AurumGuide_DDL_Trigger_Log 
	(ChangeId, DateChanged, EventInfo)
	VALUES 
	(USER,GETDATE(),EVENTDATA());
END;
-- 테이블 변경
USE sampleDB;
DROP TABLE IF EXISTS AurumGuide_DDL_Trigger;
-- Create Sample Table 
CREATE TABLE AurumGuide_DDL_Trigger(
   AurumId           varchar(100),
   loginTime         datetime 
);
go
-- 변경이력 확인 
SELECT *
 FROM AurumGuide_DDL_Trigger_Log

 

소스 코드 설명입니다.

TABLE 변경 이력을 테이블 XML 형태로 저장하는 설명 입니다.
TABLE 변경 이력을 테이블 XML 형태로 저장하는 설명 입니다.

DDL Trigger 수정.

  • 저장 프로시저 같게 ALTER TRIGGER 이용해서 수정할 수 있습니다.

DDL Trigger 비활성화 및 삭제.

  • 소스 코드입니다.
-- 비활성화 문법
DISABLE TRIGGER [schema_name.][trigger_name] 
ON [object_name | DATABASE | ALL SERVER]
--  비활성화 소스 코드
DISABLE TRIGGER TR_AurumGuide_DDL_Trigger ON DATABASE;
-- 삭제 
DROP TRIGGER TR_AurumGuide_DDL_Trigger ON DATABASE;

 

반응형