공유 Lock 끼리는 호환되므로 한 자원에 대해 여러 사용자가 동시에 공유 Lock을 설정할 수 있다.
배타적 Lock은 어떤 Lock모드와도 호환되지 않아 오직 한 사용자만이 Lock을 설정할 수 있다.
Oracle은 데이터를 읽을 때 공유 Lock을 사용하지 않는다. 따라서 읽기 작업이 갱신 작업을 방해하거나 기다리지 않는다.
Oracle이 공유 Lock을 사용하지 않고도 일관성을 유지할 수 있는 것은 Undo데이터를 이용한 다중버전 동시성 제어 매커니즘을 사용하기 때문이다.
블로킹(Blocking)과 교착상태(Deadlock)는 다르다. 블로킹은, Lock 경합이 발생해 특정 세션이 작업을 진행하지 못하고 멈춰 선 상태를 말한다. 교착상태(Deadlock)는, 두 세션이 각각 Lock을 설정한 리소스를, 서로 액세스하려고 마주보고 진행하는 상황을 말하며, 둘 중 하나가 뒤로 물러나지 않으면 영영 풀릴 수 없다.
제2절 트랜잭션
트랜잭션(Transaction)은 업무 처리를 위한 논리적인 작업 단위다.
트랜잭션의 주요 특징은 원자성, 일관성, 격리성, 영속성으로 요약된다.
낮은 단계의 격리성 수준에서 발생할 수 있는 현상으로는, Dirty Rad, Non-Repeatable Read, Phantom Read 가 있다.
ANSI/ISO SQL 표준에서 정의한 트랜잭션 격리성 수준으로는 Read Uncommitted, Read Committed, Repeatable Read, Serializable Read 의 4가지가 있다.
제3절 동시성 제어
다수 사용자에 의한 다중 트랜잭션이 동시에 작동할 때 DBMS는 이들 트랜잭션의 상호 간섭 작용에서 데이터베이스를 보호할 수 있어야 하며, 이를 동시성 제어라고 한다.
다수 사용자가 데이터를 동시에 액세스할 때 Lock을 통해 직렬화 시킨다.
동시성 제어가 어려운 이유는 동시성과 일관성은 트레이드 오프 관계이기 때문이다.
동시에 실행되는 트랜잭션 수를 최대화하면서도 입력, 수정, 삭제, 검색 시 데이터 무결성이 유지되도록 노력해야 한다.
동시성 제어 기법에는 비관적 동시성 제어와 낙관적 동시성 제어가 있다.
Oracle을 시작으로 많은 DBMS가 다중버전 동시성 제어(MVCC) 매커니즘을 도입하고 있다.
MVCC 매커니즘 하에서는 읽기 작업과 쓰기 작업이 서로 방해하지 않아 동시성을 높이면서도 높은 읽기 일관성을 유지해 준다.
문장수준 읽기 일관성은, 다른 트랜잭션에 의해 데이터의 추가, 변경, 삭제가 발생하더라도 단일 SQL문 내에서 일관성 있게 값을 읽는 것을 말한다. 일관성 기준 시점은 쿼리 시작 시점이 된다.
트랜잭션 수준 읽기 일관성은, 다른 트랜잭션에 의해 데이터의 추가, 변경, 삭제가 발생하더라도 트랜잭션 내에서 일관성 있게 값을 읽는 것을 말한다. 일관성 기준 시점은 트랜잭션 시작 시점이 된다.