로그 기반 회복 기법
IT위키
더 많은 작업
- 상위 문서 데이터베이스 회복
- Deferred Update
- 트랜잭션이 부분 완료 상태에 이르기까지 발생한 모든 변경 내용을 로그 파일에만 저장하고, 데이터베이스에는 Commit이 발생할 때까지 저장을 지연하는 기법
- 데이터베이스 회복 과정에서 UNDO는 필요 없음 : 트랜잭션 복구 시 로그 파일 내용만 폐기
- UNDO가 필요 없기 때문에 로그 레코드는 <트랜잭션 id, 데이터 아이템, 이후 값> 형식을 가짐
- Immediate Update
- 트랜잭션 수행 도중 데이터를 변경하면 변경 정보를 로그 파일에 저장하고, 트랜잭션이 부분 완료되기 전이라도 모든 변경 내용을 즉시 데이터베이스에 반영하는 기법
- 트랜잭션 완료 이전에 수행한 갱신 연산은 미완료 갱신(Uncommitted Update)이라 함
- 회복 시 로그 파일을 참조하여 Redo와 Undo 연산을 모두 실행해야 하기 때문에, 로그 레코드는 <트랜잭션 id, 데이터 아이템, 이전 값, 이후 값>형식을 가짐
회복 기법은 장애 뒤에 UNDO 와 REDO 가 필요한지로 이름을 붙인다.[1]
| 기법 | 커밋 전 실패한 트랜잭션 | 커밋한 트랜잭션 | 이름 |
|---|---|---|---|
| 지연 갱신 | 데이터베이스에 쓴 것이 없어 UNDO 불필요(로그만 버림) | 디스크 반영을 보장할 수 없어 REDO 필요 | NO-UNDO/REDO |
| 즉시 갱신(커밋 전에 모든 변경을 디스크에 강제 기록) | UNDO 필요 | 이미 디스크에 있어 REDO 불필요 | UNDO/NO-REDO |
| 즉시 갱신(일반) | UNDO 필요 | REDO 필요 | UNDO/REDO |
| 그림자 페이징 | 현재 페이지 테이블만 버림 | 커밋 때 페이지 테이블을 바꿔 끼움 | NO-UNDO/NO-REDO |
- 엘마스리는 지연 갱신을 NO-UNDO/REDO, 즉시 갱신을 UNDO/NO-REDO(steal/force) 와 UNDO/REDO(steal/no-force) 로, 그림자 페이징을 NO-UNDO/NO-REDO 로 분류한다[1]
- 따라서 "즉시 갱신은 커밋 뒤 UNDO 와 REDO 가 필요 없어 NO-UNDO/NO-REDO 이다"는 틀린 말이다. 즉시 갱신은 미완료 트랜잭션을 반드시 UNDO 해야 하고, UNDO 와 REDO 가 모두 필요 없는 것은 그림자 페이징이다
- 지연 갱신의 REDO 는 같은 연산을 여러 번 해도 결과가 같아(멱등) 회복 도중 다시 장애가 나도 처음부터 되풀이하면 된다.[2]
- ↑ 1.0 1.1 Ramez Elmasri, Shamkant B. Navathe, 「Chapter 22: Database Recovery Techniques」 강의 슬라이드, Pearson, 2016(Purdue University CS448 게시본), https://www.cs.purdue.edu/homes/bb/cs448_Fall2017/lpdf/Chapter22.pdf, 확인일: 2026-11-04.
- ↑ 「Chapter 14. Backup and Recovery」, University of Cape Town Database Systems 강의 노트, https://www.cs.uct.ac.za/mit_notes/database/htmls/chp14.html, 확인일: 2026-11-04.

