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

3961: Snapshot isolation transaction failed because the object was modified by a DDL statement (객체가 DDL로 변경되어 스냅샷 격리 트랜잭션 실패)

SQL Server

의미

스냅샷 격리 수준에서 실행 중인 트랜잭션이 접근한 객체가 다른 동시 트랜잭션의 DDL 문(스키마 변경)으로 변경되어 실패했다. 메타데이터는 버전 관리되지 않으므로 스냅샷 트랜잭션이 계속될 수 없다.

원인

SNAPSHOT 격리 수준(SET TRANSACTION ISOLATION LEVEL SNAPSHOT)으로 시작된 트랜잭션이 실행 중일 때 다른 세션이 해당 트랜잭션이 접근하는 테이블에 ALTER TABLE/CREATE INDEX 같은 DDL을 실행한 경우다. 스냅샷 트랜잭션은 행 버전은 볼 수 있지만 스키마 버전은 볼 수 없다. 이 오류는 READ COMMITTED SNAPSHOT(RCSI)에서는 발생하지 않으며, RCSI는 문장마다 새 스냅샷을 사용한다.

해결 방법

트랜잭션을 재시도한다. 보통 DDL이 완료되면 성공한다. 영구 조치로 스냅샷 워크로드가 많지 않은 유지보수 시간에 스키마 변경(DDL)을 수행한다. 애플리케이션에서 이 오류를 잡아 자동 재시도 로직을 구현한다. 장시간 실행되는 스냅샷 트랜잭션을 짧게 줄인다.

DBAtlas에서 열기 →

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