반응형

DDL 트리거는 다양한 형태로 작성될 수 있습니다.

 

테이블의 DROP ALTER 작업에 대하여 DDL 트리거 생성하기

USE AdventureWorks;

GO

IF EXISTS (SELECT * FROM sys.triggers WHERE parent_class = 0 AND name = 'safety')

DROP TRIGGER safety ON DATABASE;

GO

 

CREATE TRIGGER safety

ON DATABASE

FOR DROP_TABLE, ALTER_TABLE

AS

PRINT '테이블을 변경/삭제하려면 “safety” 트리거를 비활성화 하세요.'

ROLLBACK;

GO

-- safety라는 DDL 트리거를 비활성화합니다.

DISABLE TRIGGER safety ON DATABASE;

GO

-- safety라는 DDL 트리거를 활성화합니다.

ENABLE TRIGGER safety ON DATABASE;

GO

 

AdventureWorks 데이터베이스 내의 모든 DDL 문에 대하여, 사용 기록 남기기

USE AdventureWorks;

GO

CREATE TABLE ddl_log (PostTime datetime, DB_User nvarchar(100), Event nvarchar(100), TSQL nvarchar(2000));

GO

CREATE TRIGGER log

ON DATABASE

FOR DDL_DATABASE_LEVEL_EVENTS

AS

DECLARE @data XML

SET @data = EVENTDATA()

INSERT ddl_log (PostTime, DB_User, Event, TSQL) VALUES

(GETDATE(),

CONVERT(nvarchar(100), CURRENT_USER),

@data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),

@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)') ) ;

GO

--생성한 트리거 테스트

CREATE TABLE TestTable (a int); ?임시 테이블을 생성

DROP TABLE TestTable ;  --생성한 임시 테이블 삭제

GO

 

--DDL 로그 확인

SELECT * FROM ddl_log ;

GO

--트리거 삭제

DROP TRIGGER log ON DATABASE

GO

--ddl_log 테이블 삭제

DROP TABLE ddl_log

GO

 

반응형

+ Recent posts