반응형
반응형

동적 관리 뷰를 이용하여 트리거 정보를 확인합니다.

 

데이터베이스 수준의 DDL 트리거 목록 확인하기

SELECT * FROM sys.triggers WHERE parent_class = 0;

GO

 

서버 수준의 DDL 트리거 목록 확인하기

SELECT * FROM sys.server_triggers;

GO

 

트리거 정의 확인하기

SELECT tr.name, sm.definition

FROM sys.triggers tr JOIN sys.sql_modules sm ON tr.object_id = sm.object_id

WHERE tr.parent_class = 0;

GO

 

반응형
반응형

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

반응형