DBAtlas · 데이터베이스 운영 아틀라스

3902: The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION (대응하는 BEGIN TRANSACTION이 없는 COMMIT TRANSACTION)

SQL Server

의미

COMMIT TRANSACTION이 실행되었으나 대응하는 열린 BEGIN TRANSACTION이 없다. 트랜잭션 수(@@TRANCOUNT)가 0이므로 커밋할 트랜잭션을 찾지 못했다.

원인

BEGIN/COMMIT/ROLLBACK 사용의 불균형, 오류 후 트랜잭션이 이미 롤백됨, 중첩 트랜잭션 수의 잘못된 관리, 또는 CATCH 블록에서 ROLLBACK 후 COMMIT을 다시 호출함.

해결 방법

BEGIN과 COMMIT 문의 수를 맞춘다. 커밋 전에 @@TRANCOUNT를 확인한다(IF @@TRANCOUNT > 0 COMMIT). TRY...CATCH에서는 오류 시 XACT_STATE()/@@TRANCOUNT에 따라 ROLLBACK하고 불필요한 COMMIT을 방지한다. 중첩 트랜잭션 로직을 검토한다.

DBAtlas에서 열기 →

같은 데이터베이스의 다른 항목