복구 기법
- Log-based Recovery
- Shadow-paging
- 데이터베이스에 변화가 일어나기 전에 변화에 대한 정보를 안전저장장치에 미리 기록한다.
그림자 기법

- Atomicity , Durability 를 지키는 아주 간단한 방법
- 대규모 데이터베이스에 비효율적
- 동시 트랜잭션이 많은 경우 그림자가 많이 생성되어 문제 발생
- 모든 업데이트는 데이터베이스의 shadow copy에 만들어짐
- db_pointer 는 가장 최신 버전 데이터를 포인트
- 실패하면 이전것을 그대로 가르킴
간단 로깅 : 정상처리
- 로그는 안전저장장치에 기록 : 손실되는 경우가 없도록 한다.
- 어떤 값을 어떤 방식으로 기록하는 지는 여러 방식이 존재
- 연산전 값과, 연산후 값 기록
- Ti : write(X)
- <Ti, start> : write를 실행하기 전에 작성
- <Ti, X, V1, V2>
- <Ti, commit> : 마지막 명령문 완료시
- 디크스 → 메인 메모리 이동 , 로그 레코드 저장 : 블록 단위
- 복구 기법은 동시성 제어 기법과 밀접한 관련성이 있다.
- 엄격 2PL 동시성 제어(트랜잭션 종료시 lock해제)를 가정
- 커밋되지 않은 트랜잭션의 갱신 내용은 다른 트랜잭션에서 보이지 않아야 함
- 모든 트랜잭션은 하나의 디크스 버퍼와 하나의 로그를 공유한다.
- 하나의 버퍼 블록에는 하나 이상의 트랜잭션에 의해 갱신된 데이터 항목이 포함
- 트랜잭션은 동시에 다수가 실행
- 로그 블록 하나 내에는 다수개의 트랜잭션 로그 레코드가 저장
간단 로깅 : 체크포인트
- 시스템 장애시에 복구를 원활히 하기 위하여 체크포인트를 수행한다.
- 이론적으로만 보면 체크포인트는 필요없는 복구 연산
- 실질적으론 주기적으로 수행하여 복구를 빠르게 수행