ENABLE TRIGGER(Transact-SQL)
DML, DDL 또는 LOGON 트리거를 활성화합니다.
구문
ENABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL }
ON { object_name | DATABASE | ALL SERVER } [ ; ]
인수
schema_name
트리거가 속한 스키마의 이름입니다. DDL 또는 로그온 트리거에 대해서는 schema_name을 지정할 수 없습니다.trigger_name
활성화할 트리거의 이름입니다.ALL
ON 절의 범위에서 정의한 모든 트리거를 활성화할 것임을 나타냅니다.object_name
실행할 DML 트리거 trigger_name이 만들어진 테이블 또는 뷰의 이름입니다.DATABASE
DDL 트리거의 경우 데이터베이스 범위에서 실행하도록 trigger_name을 만들거나 수정했음을 나타냅니다.ALL SERVER
DDL 트리거의 경우 서버 범위에서 실행하도록 trigger_name을 만들거나 수정했음을 나타냅니다. ALL SERVER는 로그온 트리거에도 적용됩니다.[!참고]
포함된 데이터베이스에서는 이 옵션을 사용할 수 없습니다.
주의
트리거를 활성화하더라도 트리거를 다시 만드는 것은 아닙니다. 비활성화된 트리거는 현재 데이터베이스 내에 여전히 개체로 존재하지만 시작하지는 않습니다. 트리거를 활성화하면 트리거를 시작하도록 원래 프로그래밍된 Transact-SQL 문이 실행될 때마다 트리거가 시작됩니다. 트리거는 DISABLE TRIGGER를 사용하여 비활성화됩니다. 테이블에 정의된 DML 트리거는 ALTER TABLE을 사용하여 비활성화되거나 활성화될 수도 있습니다.
사용 권한
DML 트리거를 활성화하려면 최소한 트리거가 만들어진 테이블이나 뷰에 대한 ALTER 권한이 필요합니다.
서버 범위(ON ALL SERVER)의 DDL 트리거 또는 LOGON 트리거를 활성화하려면 서버에 대한 CONTROL SERVER 권한이 필요합니다. 데이터베이스 범위(ON DATABASE)에서 DDL 트리거를 활성화하려면 최소한 현재 데이터베이스에 대한 ALTER ANY DATABASE DDL TRIGGER 권한이 필요합니다.
예
1.테이블의 DML 트리거 활성화
다음 예에서는 Address 테이블에 만든 uAddress 트리거를 비활성화한 다음 다시 활성화하는 방법을 보여 줍니다.
USE AdventureWorks2012;
GO
DISABLE TRIGGER Person.uAddress ON Person.Address;
GO
ENABLE Trigger Person.uAddress ON Person.Address;
GO
2.DDL 트리거 활성화
다음 예에서는 데이터베이스 범위에서 DDL 트리거 safety를 만든 후 비활성화합니다.
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 'You must disable Trigger "safety" to drop or alter tables!'
ROLLBACK;
GO
DISABLE TRIGGER safety ON DATABASE;
GO
ENABLE TRIGGER safety ON DATABASE;
GO
3.같은 범위에서 정의된 모든 트리거 활성화
다음 예에서는 서버 범위에서 만든 모든 DDL 트리거를 활성화합니다.
USE AdventureWorks2012;
GO
ENABLE Trigger ALL ON ALL SERVER;
GO