회복과 동시성 제어
DBMS는 데이터베이스가 항상 정확하고 일관된 상태를 유지할 수 있도록 장애 발생 시 회복 기능과 동시성 제어 기능을 제공한다. 장애 발생 시 회복 기능을 통해, 여러 사용자가 동시에 데이터베이스를 사용해도 동시성 제어 기능을 통해 데이터베이스는 항상 일관된 상태를 유지한다. 회복과 동시성 제어 기능은 트랜잭션을 기반으로 동작한다.
트랜잭션 (Transaction)
트랜잭션이란 하나의 작업을 수행하는데 필요한 데이터베이스의 연산들(SELECT, INSERT, UPDATE, DELETE)을 모아놓은 것이다. 데이터베이스는 트랜잭션 단위로 작업을 수행한다.
계좌이체 트랜잭션은 2개의 UPDATE 문으로 구성되어 있다. 하나는 성호 계좌에서 5000원을 감소시키는 UPDATE문이며 다른 하나는 은경 계좌에 5000원을 증가시키는 UPDATE문이다.
트랜잭션의 특성
트랜잭션은 아래 4가지 특성을 반드시 보장해야한다. 그래야만 데이터베이스가 항상 정확하고 일관된 상태를 유지할 수 있다.
- 원자성 : 트랜잭션을 구성하는 연산들이 모두 정상적으로 수행되거나 하나도 실행되지 않아야 한다는 all-or-nothing 방식을 의미한다. 만약 위의 계좌이체 트랜잭션에서 첫 번째 UPDATE문을 수행한 후 장애가 발생했다면 두 번째 UPDATE문을 수행하지 못해 5000원이 사라지는 모순된 상황이 발생한다. 그렇기에 장애를 해결한 후 두 번째 UPDATE문을 수행해 트랜잭션의 모든 연산을 수행하거나 첫 번째 UPDATE문의 연산을 취소하고 데이터베이스를 트랜잭션 수행 전 상태로 되돌려 놓으면 데이터베이스는 항상 정확하고 일관된 상태를 유지할 수 있다.
- 일관성 : 트랜잭션이 수행한 후에도 데이터베이스가 일관된 상태를 유지해야 함을 의미한다. 계좌이체 트랜잭션 수행 후 기본키, 외래키 제약 조건과 같은 명시적인 제약 조건 뿐만 아니라 서로 간 계좌의 입출금 금액이 같아야 한다는 비명시적인 조건도 만족해야한다.
- 지속성 : 트랜잭션이 정상적으로 완료된 후 데이터베이스에 반영한 수행 결과는 어떠한 경우에도 손실되지 않고 영구적이어야 함을 의미한다.
- 격리성 : 현재 수행 중인 트랜잭션이 완료될 때 까지 트랜잭션의 연산에 다른 트랜잭션이 접근할 수 없음을 의미한다. 수행중인 트랜잭션이 수행중인 다른 트랜잭션의 연산에 접근한다면 데이터베이스의 일관성이 깨질 수 있다.
트랜잭션의 연산
트랜잭션과 관련된 연산으로 트랜잭션 수행이 완료되었음을 선언하는 commit 연산과 트랜잭션 수행이 실패했음을 선언하는 rollback 연산이 있다. 트랜잭션 수행이 완료됬으면 commit 연산을, 수행에 실패했으면 rollback 연산을 반드시 호출해 트랜잭션을 종료한다.
- commit : 트랜잭션 수행 완료 선언
- rollback : 트랜잭션 수행 취소 선언
트랜잭션 상태
트랜잭션은 다섯 가지 상태 중 하나에 속하게 된다.
- 활동(active) 상태 : 트랜잭션의 수행이 시작되어 수행 중인 상태를 활동 상태라 한다.
- 부분 완료(partially committed) 상태 : 트랜잭션의 모든 연산을 처리한 상태를 부분 완료 상태라 한다.
- 완료(committed) 상태 : 부분 완료 상태의 트랜잭션에 commit 연산을 실행한 상태를 완료 상태라 한다. 트랜잭션이 완료 상태가 되면 트랜잭션의 수행 결과가 데이터베이스에 영구적으로 반영된다는 걸 보장받는다.
- 실패(failed) 상태 : 하드웨어, 소프트웨어, 트랜잭션 내부의 오류로 장애가 발생해 트랜잭션의 수행이 중단된 상태를 실패 상태라 한다.
- 철회(aborted) 상태 : 실패 상태의 트랜잭션에 rollback 연산을 실행한 상태를 철회 상태라 한다. 트랜잭션이 철회 상태가 되면 데이터베이스 상태를 트랜잭션이 수행되기 전으로 되돌려 놓는다는 걸 보장받는다.
'Computer Science > DataBase' 카테고리의 다른 글
[데이터베이스 - 9] 병행 제어 (0) | 2022.10.14 |
---|---|
[데이터베이스 - 8] 장애와 회복 (0) | 2022.10.12 |
[데이터베이스 - 6] SQL (0) | 2022.09.29 |
[데이터베이스 - 5] 관계 데이터 모델 (0) | 2022.09.29 |
[데이터베이스 - 4] 데이터베이스 설계 (0) | 2022.09.23 |