LOGON 트리거 실행 지침

이 항목에서는 LOGON 트리거의 실행 순서를 지정하고 LOGON 트리거 내 트랜잭션을 관리하는 지침에 대해 설명합니다.

첫 번째 트리거 및 마지막 트리거 지정

LOGON 이벤트에 여러 트리거를 정의할 수 있습니다. 이러한 트리거 중 하나를 sp_settriggerorder 시스템 저장 프로시저를 사용하여 이벤트에서 실행될 첫 번째 트리거나 마지막 트리거로 지정할 수 있습니다. SQL Server는 남은 트리거의 실행 순서를 보장하지 않습니다. 자세한 내용은 구조적 저장소 디자인 및 구현(데이터베이스 엔진)를 참조하십시오.

트랜잭션 관리

SQL Server에서 LOGON 트리거를 실행하기 전에 SQL Server에서는 어느 사용자 트랜잭션에도 종속되지 않은 암시적 트랜잭션을 만듭니다. 따라서 첫 번째 LOGON 트리거가 실행을 시작하면 트랜잭션 개수가 1개입니다. 모든 LOGON 트리거가 실행을 마친 후 트랜잭션은 커밋됩니다. 다른 트리거 유형과 마찬가지로 SQL Server에서는 LOGON 트리거가 0개의 트랜잭션 개수로 실행을 마칠 경우 오류가 반환됩니다. ROLLBACK TRANSACTION 문은 중첩된 트랜잭션 내에서 문이 실행될 경우에도 트랜잭션 개수를 0으로 다시 설정합니다. COMMIT TRANSACTION은 트랜잭션 개수를 0으로 감소시킬 수 있으므로 로그온 트리거 내에서 COMMIT TRANSACTION 문을 실행하지 않는 것이 좋습니다.

LOGON 트리거 내에서 ROLLBACK TRANSACTION 문을 사용할 때는 다음을 고려하십시오.

  • ROLLBACK TRANSACTION에 대한 모든 데이터 수정 사항은 롤백됩니다. 이러한 수정 사항에는 동일한 이벤트에서 실행된 이전 트리거와 현재 트리거에 의해 수정된 내용이 포함됩니다. 특정 이벤트에 대한 남은 트리거는 모두 실행되지 않습니다.

  • 현재 트리거는 ROLLBACK 문 다음에 표시되는 남아 있는 모든 문을 계속 실행합니다. 이 문 중에서 데이터를 수정한 경우 수정 사항은 롤백되지 않습니다.

LOGON 이벤트의 트리거가 실행되는 동안 다음 조건 중 하나라도 발생할 경우 사용자 세션이 설정되지 않습니다.

  • 원래 암시적 트랜잭션이 롤백되거나 실패합니다.

  • 심각도가 20 이상인 오류가 트리거 본문 내에 발생합니다.