SQL Server에서 Trigger 활성 / 비활성 감시
- Version : SQL Server 2005, 2008, 2008R2, 2012
SQL Server는 기본적으로 트리거의 활성/비활성화를 추적하지 않는다. 트리거를 생성하면 기본적으로는 활성화 되어 있다. 하지만 권한을 가진 다른 사용자가 트리거를 비활성 시킬 수 있다.
트리거의 활성/비활성을 감시하는데에는 많은 비용이 소모 될 수 있다. 실습을 통하여 트리거의 활성/비활성을 캡처하자.
다음과 같이 서버 감사를 생성하고 실행 한다.
CREATE SERVER AUDIT ServerAudit TO FILE (FILEPATH = 'D:\', MAXSIZE = 1GB) WITH (ON_FAILURE = CONTINUE); GO
ALTER SERVER AUDIT ServerAudit WITH (STATE = ON); |
서버 감사를 실행 하면 다음과 같이 지정된 경로에 감사 파일이 생성되는 것을 확인 할 수 있다.
데이터베이스 수준에서 감사 사양을 생성해야 한다.
캡처의 범위는 SCHEMA_OBJECT_CHANGE_GROUP이다.
CREATE DATABASE AUDIT SPECIFICATION schema_change FOR SERVER AUDIT ServerAudit ADD (SCHEMA_OBJECT_CHANGE_GROUP) WITH (STATE = ON); GO |
간단한 트리거가 있는 테이블을 생성한다.
CREATE TABLE SW_Trigger( ID INT); GO
CREATE TRIGGER T_SW_Trigger ON SW_Trigger FOR INSERT AS BEGIN SELECT 1 END GO |
트리거 생성이 완료 되었으면 간단한 테이블을 만들어 본다. 그리고 다음의 코드를 실행하면 다음과 같이 ServerAudit 파일에서 트리거된 내용을 확인 할 수 있다.
SELECT EVENT_TIME, SUCCEEDED, SERVER_PRINCIPAL_NAME, [OBJECT_NAME], [STATEMENT] FROM SYS.FN_GET_AUDIT_FILE ('D:\SERVERAUDIT*' , NULL, NULL) WHERE DATABASE_NAME = 'SW_TEST' |
트리거를 활성 비활성화 해보자.
DISABLE TRIGGER T_SW_Trigger ON SW_Trigger GO
ENABLE TRIGGER T_SW_Trigger ON SW_Trigger GO |
트리거의 활성/비활성 내용이 캡처 되고 있는지 확인 할 수 있다.
SELECT EVENT_TIME, SUCCEEDED, SERVER_PRINCIPAL_NAME, [OBJECT_NAME], [STATEMENT] FROM SYS.FN_GET_AUDIT_FILE ('D:\SERVERAUDIT*' , NULL, NULL) WHERE DATABASE_NAME = 'SW_TEST' |
비활성의 내용만 확인하려면 다음과 같이 where에 스크립을 추가 한다.
AND [statement] LIKE '%Disable%TRIGGER%' |
특정 조건에 따라 필터를 적절히 활용 할 수 있도록 하자.
SQL Server에서 특정 동작을 캡처하는 방법에는 여러가지가 있다. 버전에 따라 약간의 제약사항은 있지만 데이터베이스 감사는 매우 중요하다. 많은 오버헤드를 발생하지 않는 적정선에서 잘 활용 할 수 있도록 하자.
[참고자료]
2013-02-25 / 강성욱 / http://sqlmvp.kr
'SQL Server > SQL Server Tip' 카테고리의 다른 글
프로파일러를 이용한 실행계획 캡처하기 (0) | 2015.07.20 |
---|---|
SQL Server 그래픽 실행 계획 및 텍스트 실행 계획 (0) | 2015.07.20 |
DDL Trigger를 이용한 데이터베이스 변경 사항 추적 (0) | 2015.07.20 |
Trigger를 이용한 SQL Server 커넥션 풀링 확인 (0) | 2015.07.20 |
SQL Server Trigger (0) | 2015.07.20 |