본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
상위 문서 데이터베이스 회복

지연 갱신 회복 기법

편집 원본 편집
Deferred Update
트랜잭션이 부분 완료 상태에 이르기까지 발생한 모든 변경 내용을 로그 파일에만 저장하고, 데이터베이스에는 Commit이 발생할 때까지 저장을 지연하는 기법
  • 데이터베이스 회복 과정에서 UNDO는 필요 없음 : 트랜잭션 복구 시 로그 파일 내용만 폐기
  • UNDO가 필요 없기 때문에 로그 레코드는 <트랜잭션 id, 데이터 아이템, 이후 값> 형식을 가짐
  • 트랜잭션 단위가 종료될 때까지 디스크에 기록하는 출력 연산을 지연시키고, 데이터베이스 변경 내역을 로그에 보관
  • 트랜잭션 완료(Commit) 시 로그를 이용해 지연된 출력 연산(Redo) 수행
  • 트랜잭션이 실패할 경우 Undo 없이 로그 단순 폐기

즉시 갱신 회복 기법

편집 원본 편집
Immediate Update
트랜잭션 수행 도중 데이터를 변경하면 변경 정보를 로그 파일에 저장하고, 트랜잭션이 부분 완료되기 전이라도 모든 변경 내용을 즉시 데이터베이스에 반영하는 기법
  • 트랜잭션 완료 이전에 수행한 갱신 연산은 미완료 갱신(Uncommitted Update)이라 함
  • 회복 시 로그 파일을 참조하여 Redo와 Undo 연산을 모두 실행해야 하기 때문에, 로그 레코드는 <트랜잭션 id, 데이터 아이템, 이전 값, 이후 값>형식을 가짐
  • 트랜잭션 활성 상태에서 데이터 변경 결과를 로그와 데이터베이스에 반영
  • 회복 시 트랜잭션 실행 이전의 상태로 복구
  • 로그 파일을 참조하여 미완료된 변경에 대해 Undo를 우선 실행한 후, 완료된 변경에 대해 Redo 실행

회복 알고리즘의 이름

편집 원본 편집

회복 기법은 장애 뒤에 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. ↑ 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.
  2. ↑ 「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.