5. 자주 하는 실수 (Tip)
실수 1: 자동 커밋이 켜진 채 ROLLBACK 을 믿는다
예제 1 처럼 자동 커밋이 켜져 있으면 문장마다 확정됩니다. 운영 DB 에 직접 UPDATE 를 돌릴 때 도구의 자동 커밋 설정을 먼저 확인합니다. Oracle 이라도 JDBC 를 쓰는 도구는 기본이 켜져 있을 수 있습니다.
실수 2: 오류를 무시하고 다음 문장을 이어 간다
예제 4 처럼 실패한 문장 뒤에도 트랜잭션은 열려 있습니다. 문장마다 결과를 확인하고 실패하면 ROLLBACK 합니다. 오류 처리가 없는 스크립트는 반쪽짜리 결과를 커밋합니다.
실수 3: DDL 을 트랜잭션 중간에 넣는다
Oracle 과 MySQL 은 DDL 이 앞의 변경을 확정합니다. "테이블 바꾸고 데이터 바꾸고 문제 있으면 롤백" 계획이 DB 에 따라 통하지 않습니다. DDL 은 트랜잭션 밖에서 따로 실행하고, 실행 전에 백업을 만듭니다.
실수 4: SAVEPOINT 로 트랜잭션이 끝났다고 생각한다
ROLLBACK TO 는 표식까지만 되돌리고 트랜잭션은 그대로입니다. 마지막에 COMMIT 을 빼먹으면 세션을 닫을 때 취소되거나 잠금이 남습니다. 또 이미 지나온 표식보다 뒤의 표식으로는 되돌릴 수 없습니다.
실수 5: COMMIT 없이 세션을 오래 둔다
트랜잭션을 열어 두고 화면 입력을 기다리거나 회의에 들어가면 그 트랜잭션이 잡은 잠금이 유지됩니다. 다른 사용자의 같은 행 수정이 모두 대기합니다. 트랜잭션은 짧게, 사용자 입력은 트랜잭션 밖에서 받습니다.