Database/MS-SQL
MSSQL - @@TRANCOUNT (시스템 변수로 중첩 트랜잭션 확인하기)
luvris2
2022. 12. 29. 14:47
반응형
이 포스팅은 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를 활용하여 트랜잭션이 실행중인지를 확인하기에 유용하다.
반응형