💡 본 글은 ‘실습과 함께하는! 데이터베이스 Oracle 12c’ 강의 내용을 바탕으로 정리하였습니다.
트랜잭션
개념
- 복수의 SQL 문을 수행하는 도중에 장애가 발생했을 때 장애에 대응할 수 있도록 하는 기능
- 전체 수행(
COMMIT
)과 전체 취소(ROLLBACK
) 두 가지의 결과값만 가져야 함 SAVEPOINT
명령어까지ROLLBACK
할 수 있음AutoCommit
이 되는 경우- DDL/DCL 명령문
- 오라클이 정상 종료된 경우
💡 DML은 자동으로 안 되므로
commit
,rollback
명령어로 반영해주어야 함
ACID
- 원자성(Atomicity)
- All-or-Nothing
- 일관성(Consistency)
- 트랜잭션 전후에 데이터가 손상되면 안 됨
- 같은 데이터가 다른 값을 가지면 안 됨
- 고립성/격리수준(Isolation)
- 여러 개의 트랜잭션이 수행될 때 성능과 데이터 안정성 간의 trade-off
- 지속성(Durability)
- 트랜잭션이 종료된 이후에도 데어텡 문제가 없어야 함
로컬 / 글로벌 트랜잭션
로컬 트랜잭션
- 동일한 시스템 내에서 트랜잭션
- DBMS가 보장하는 경우가 많음
글로벌 트랜잭션
- 서로 다른 시스템에서의 트랜잭션 (ex. 서로 다른 은행 간 이체)
- DBMS 외부의 미들웨어/WAS가 보장
락 (Lock)
- 여러 트랜잭션이 공유 자원(리소스)에 접근하려고 경쟁할 때 제어하는 방법
- 동시성 제어(Concurrency Control)라고 하고 보통 Lock으로 해결
- 프로그래밍에서는 동기화라고 함
- 일관성과 무결성을 지키기 위해서 적용
Lock Granularity
- Global Lock
- 어떤 트랜잭션이 수행 중이면 다른 트랜잭션은 전혀 수행 안 됨
- 흔하지는 않으며, 일반 데이터베이스 덤프와 같은 특수 경우에 사용
- Table Lock
- 동일한 테이블을 다른 트랜잭션이 사용하고 있다면 접근 금지
- Row Lock
- 동일한 줄(Row)만 접근 금지
- 테이블 락에 비해 높은 성능