트랜잭션 제어는 기본 커밋 경계와 예외를 같이 본다
같은 COMMIT, ROLLBACK,
SAVEPOINT
라도 자동 커밋 설정, DDL 처리, 읽기 전용 선언의 의미가 DBMS마다
다르다. 문법보다 먼저 “언제 시작되고, 무엇이 경계를 바꾸는가”를
확인한다.
DBMS별 제어 기준
문법 이름보다 기본값과 암묵 동작을 먼저 대조한다.
autocommit=1이 기본이면 문장마다 확정된다.
업무 단위는 명시적으로 묶어야 한다.
BEGIN 후에는 블록
단위다.
실패한 블록은 정리 전까지 이어서 실행하기 어렵다.
SET TRANSACTION은 시작 직후 사용한다.
START TRANSACTION, BEGIN,
autocommit=0로 묶는다.
BEGIN 또는 드라이버의 트랜잭션 API가 경계를 만든다.
BEGIN TRANSACTION과 세션 옵션으로 범위를 만든다.
중첩처럼 보여도 실제 확정은 바깥 경계가 중요하다.
SAVEPOINT 이름 후 ROLLBACK TO 이름.
ROLLBACK TO SAVEPOINT 이름으로 부분 취소한다.
최종 확정은 여전히 COMMIT이다.
RELEASE SAVEPOINT를 모두
쓴다.
SAVE TRANSACTION 사용.
부분 롤백은 @@TRANCOUNT를 줄이지 않는다.
SET TRANSACTION READ ONLY는 트랜잭션 기준 일관
읽기에 가깝다.
START TRANSACTION READ ONLY로 쓰기 방지와 최적화를
기대한다.
READ ONLY와 격리 수준에 따라 스냅샷 기준이
달라진다.
SNAPSHOT은 읽기 일관성이지 읽기 전용 선언은 아니다.
보장은 권한·라우팅·정책으로 분리한다.
명시 확정 전까지 안전해 보이지만, DDL이 들어오면 경계가 갑자기 바뀐다.
암묵 커밋을 먼저 의심자동 커밋 기본값 때문에 “트랜잭션을 열었다”는 사실 자체를 확인해야 한다.
연결 설정을 먼저 확인트랜잭션 DDL이 강하지만, 모든 관리 명령이 블록 안에서 되는 것은 아니다.
예외 명령을 분리저장점과 중첩 카운트가 헷갈리기 쉬워 최종 확정 경계를 따로 봐야 한다.
바깥 트랜잭션을 기준- 1 DML 변경 아직 확정하지 않았다고 생각함
- 2 DDL 실행 테이블 변경, 인덱스 변경 등
- 3 자동 확정 DBMS가 경계를 끊음
- 4 롤백 불가 업무 변경까지 남을 수 있음
- 1 BEGIN 작업 경계를 명시
- 2 DDL 실행 스키마 변경 포함
- 3 검증 실패 마이그레이션 점검
- 4 ROLLBACK 다수 DDL 되돌림 가능
저장점 뒤로 되돌릴 수 있을 뿐, 그 이전 변경을 확정하지 않는다.
최종 COMMIT 또는 ROLLBACK 경계가 여전히
필요하다.
어떤 DBMS는 쓰기 방지에 가깝고, 어떤 경우에는 스냅샷 기준과 격리 수준이 더 중요하다. 보고서용 조회라면 기준 시점을 명시한다.
콘솔, 드라이버, ORM, 커넥션 풀이 자동 커밋과 트랜잭션 시작 방식을 바꾼다. 운영 장애는 이 설정 차이에서 자주 나온다.
자동 커밋, 드라이버 기본값, 풀 반환 시 초기화 여부를 먼저 확인한다.
업무 DML과 스키마 변경을 같은 롤백 기대 안에 넣지 않는다.
부분 취소 지점일 뿐이므로 최종 확정과 잠금 해제는 따로 설계한다.
읽기 전용, 스냅샷, 격리 수준 중 무엇으로 일관성을 얻는지 구분한다.