MSSQL - @@TRANCOUNT (시스템 변수로 중첩 트랜잭션 확인하기)

320x100
반응형

 

이 포스팅은 MSSQL을 기준으로 작성되었습니다.

트랜잭션에 대한 자세한 설명은 아래의 포스팅을 참고해주세요.

https://luvris2.tistory.com/387

 

MSSQL - 트랜잭션의 개념 이해와 종류, 사용 방법

트랜잭션이란? (Transaction) 데이터베이스 관리 시스템에서 상호작용의 단위 하나의 논리적 작업 단위로 수행되는 일련의 작업 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는

luvris2.tistory.com


@@TRANCOUNT

  • 트랜잭션의 중첩된 수를 나타내주는 시스템 변수
  • 트랜잭션이 실행되지 않을 경우 0을 반환
  • 트랜잭션의 중첩수에 따라 수를 반환
  • 중첩 트랜잭션은 권장하지 않지만, 해당 시스템 변수를 이용하여 트랜잭션이 실행중인지를 확인하기에 유용

트랜잭션 중첩 확인하기

삼중 트랜잭션으로 해당 시스템 변수의 반환값 확인

select @@TRANCOUNT
-- 0 : 트랜잭션이 실행되지 않은 상태

BEGIN TRAN
select @@TRANCOUNT -- 1
-- 1 : 하나의 트랜잭션이 실행된 상태

    BEGIN TRAN
    select @@TRANCOUNT -- 2
    -- 2 : 두개의 트랜잭션이 중첩된 상태

        BEGIN TRAN
        select @@TRANCOUNT -- 3
        -- 3 : 세개의 트랜잭션이 중첩된 상태

        COMMIT TRAN
        select @@TRANCOUNT -- 2
        -- 2: 커밋으로 삼중 트랜잭션 종료, 이중 트랜잭션이 실행된 상태

    COMMIT TRAN
    select @@TRANCOUNT -- 1
    -- 1 : 커밋으로 이중 트랜잭션 종료, 하나의 트랜잭션이 실행된 상태
    
COMMIT TRAN
select @@TRANCOUNT -- 0
-- 0 : 커밋으로 트랜잭션 종료, 트랜잭션이 실행되지 않은 상태


결론

중첩 트랜잭션 설계 중 실수로 커밋이나 롤백을 하지 않을 경우,

트랜잭션이 종료되지 않아 데이터베이스 제어가 어려울 경우가 생길 수 있다.

그럴 때에 @@TRANCOUNT를 활용하여 트랜잭션이 실행중인지를 확인하기에 유용하다.

320x100
반응형