DBMS 비교

트랜잭션 제어는 기본 커밋 경계와 예외를 같이 본다

같은 COMMIT, ROLLBACK, SAVEPOINT 라도 자동 커밋 설정, DDL 처리, 읽기 전용 선언의 의미가 DBMS마다 다르다. 문법보다 먼저 “언제 시작되고, 무엇이 경계를 바꾸는가”를 확인한다.

시작 명시 트랜잭션인지, 연결 설정이 자동 커밋인지 본다.
경계 DDL과 클라이언트 옵션이 커밋 경계를 바꿀 수 있다.
예외 저장점과 읽기 전용은 “부분 제어”이지 만능 안전장치가 아니다.
시작 조건 DML 변경 DDL·저장점 예외 확정 또는 취소
Oracle 명시 확정 전 DML은 보류되지만 DDL은 암묵 커밋을 만든다.
MySQL 자동 커밋 기본값과 DDL 예외가 경계를 가장 자주 흔든다.
PostgreSQL 트랜잭션 DDL이 강하지만 블록 밖 명령 예외를 분리해야 한다.
SQL Server 저장점과 중첩 카운트보다 바깥 확정 경계를 기준으로 읽는다.

DBMS별 제어 기준

문법 이름보다 기본값과 암묵 동작을 먼저 대조한다.

항목
Oracle
MySQL InnoDB
PostgreSQL
SQL Server
기본 커밋
DML은 트랜잭션을 열고 명시 확정 전까지 보류된다. 세션 종료 시 미확정 변경은 보통 취소된다.
autocommit=1이 기본이면 문장마다 확정된다. 업무 단위는 명시적으로 묶어야 한다.
클라이언트 자동 커밋이 흔하고, BEGIN 후에는 블록 단위다. 실패한 블록은 정리 전까지 이어서 실행하기 어렵다.
기본은 문장 단위 자동 확정이며 명시/암시 트랜잭션 설정이 따로 있다. 연결 옵션에 따라 체감 동작이 달라진다.
시작 방식
첫 DML이 자연스럽게 트랜잭션을 만든다. SET TRANSACTION은 시작 직후 사용한다.
START TRANSACTION, BEGIN, autocommit=0로 묶는다.
BEGIN 또는 드라이버의 트랜잭션 API가 경계를 만든다.
BEGIN TRANSACTION과 세션 옵션으로 범위를 만든다. 중첩처럼 보여도 실제 확정은 바깥 경계가 중요하다.
저장점
SAVEPOINT 이름ROLLBACK TO 이름.
ROLLBACK TO SAVEPOINT 이름으로 부분 취소한다. 최종 확정은 여전히 COMMIT이다.
저장점 생성, 부분 취소, RELEASE SAVEPOINT를 모두 쓴다.
SAVE TRANSACTION 사용. 부분 롤백은 @@TRANCOUNT를 줄이지 않는다.
DDL 처리
많은 DDL이 실행 전후로 암묵 커밋을 만든다. DML과 섞이면 롤백 기대가 깨질 수 있다.
많은 DDL이 암묵 커밋된다. 엔진과 명령별 예외를 확인한다.
많은 DDL이 트랜잭션 안에서 되돌릴 수 있다. 단, 데이터베이스 생성·동시 인덱스 등은 예외다.
여러 DDL을 트랜잭션에 넣을 수 있지만 명령별 제한과 잠금 비용을 본다.
읽기 전용
SET TRANSACTION READ ONLY는 트랜잭션 기준 일관 읽기에 가깝다.
START TRANSACTION READ ONLY로 쓰기 방지와 최적화를 기대한다.
READ ONLY와 격리 수준에 따라 스냅샷 기준이 달라진다.
SNAPSHOT은 읽기 일관성이지 읽기 전용 선언은 아니다. 보장은 권한·라우팅·정책으로 분리한다.
Oracle

명시 확정 전까지 안전해 보이지만, DDL이 들어오면 경계가 갑자기 바뀐다.

암묵 커밋을 먼저 의심
MySQL

자동 커밋 기본값 때문에 “트랜잭션을 열었다”는 사실 자체를 확인해야 한다.

연결 설정을 먼저 확인
PostgreSQL

트랜잭션 DDL이 강하지만, 모든 관리 명령이 블록 안에서 되는 것은 아니다.

예외 명령을 분리
SQL Server

저장점과 중첩 카운트가 헷갈리기 쉬워 최종 확정 경계를 따로 봐야 한다.

바깥 트랜잭션을 기준
Oracle·MySQL에서 흔한 실패 흐름 암묵 커밋
  1. 1 DML 변경 아직 확정하지 않았다고 생각함
  2. 2 DDL 실행 테이블 변경, 인덱스 변경 등
  3. 3 자동 확정 DBMS가 경계를 끊음
  4. 4 롤백 불가 업무 변경까지 남을 수 있음
PostgreSQL에서 가능한 설계 흐름 트랜잭션 DDL
  1. 1 BEGIN 작업 경계를 명시
  2. 2 DDL 실행 스키마 변경 포함
  3. 3 검증 실패 마이그레이션 점검
  4. 4 ROLLBACK 다수 DDL 되돌림 가능
저장점은 부분 커밋이 아니다

저장점 뒤로 되돌릴 수 있을 뿐, 그 이전 변경을 확정하지 않는다. 최종 COMMIT 또는 ROLLBACK 경계가 여전히 필요하다.

읽기 전용은 같은 말이 아니다

어떤 DBMS는 쓰기 방지에 가깝고, 어떤 경우에는 스냅샷 기준과 격리 수준이 더 중요하다. 보고서용 조회라면 기준 시점을 명시한다.

클라이언트가 DBMS처럼 행동한다

콘솔, 드라이버, ORM, 커넥션 풀이 자동 커밋과 트랜잭션 시작 방식을 바꾼다. 운영 장애는 이 설정 차이에서 자주 나온다.

01 연결 설정

자동 커밋, 드라이버 기본값, 풀 반환 시 초기화 여부를 먼저 확인한다.

02 DDL 분리

업무 DML과 스키마 변경을 같은 롤백 기대 안에 넣지 않는다.

03 저장점 해석

부분 취소 지점일 뿐이므로 최종 확정과 잠금 해제는 따로 설계한다.

04 조회 기준

읽기 전용, 스냅샷, 격리 수준 중 무엇으로 일관성을 얻는지 구분한다.