DBMS는 예기치 못한 장애(Crash)발생 시 데이터베이스의 복구를 위해 log record와 check point를 사용해 복구 작업을 실행한다. 그렇다면 어떤 과정으로 복구를 실행할 수 있는가?
① input(Bx) : data X를 보함하고 있는 디스크 블록(Bx)를 메인 메모리로 이동시키는 연산
② output(Bx) : data X를 포함하는 메인 메모리 버퍼 블록 Bx를 디스크 블록에 이동시키는 연산
왜 disk에 반영되는 실행 시기를 알 수 없을까?
- buffer manager의 "steal, no force" policy 때문. (for response time & throuhput)
① read(x) : 내부적으로 input(Bx)가 실행
② write(x) : output(Bx)가 실행되어야 연산의 결과가 안전하게(비휘발성) 디스크의 데이터베이스에 저장
① redo(재실행)
: 가장 최근에 저장된 데이터베이스의 복사본을 가져와 로그를 이용해 복사본 생성 이후에 실행 된 모든 변경 연산을 재실행 하여 장애 발생 직전의 데이터베이스 상태로 복구
② undo(취소)
: 로그를 이용해 지금까지 실행된 모드 변경 연산을 취소해 데이터베이스를 원래의 상태로 복구
※ 하기의 내용은 Recovery-① 에 기재한 prevLSN,page_length 등의 필드는 생략하고 기본적인 필드만 고려
<Ti, start>
- Ti가 수행을 시작
<Ti, X, old_val, new_val>
- Ti가 X를 old_val에서 new_val로 갱신
<Ti, commit>
- Ti가 성공적으로 완료
<Ti, abort>
- Ti가 철회됨
① 지연 갱신 회복기법
트랜잭션이 '부분 완료' 상태가 될 때까지 모든 output()연산을 "지연"
<Ti, commit>을 포함하는 로그 레코드를 로그 파일에 기록한 후 데이터베이스에 갱신 요청(output() 연산 요청) 후 '완료'상태로
★ 장애 발생 시
⑴ 트랜잭션이 완료되기 전 장애 발생
=> 로그 내용을 무시하고 버림
⑵ 트랜잭션 완료 후 장애 발생
=> redo 연산 실행
② 즉시 갱신 회복기법
트랜잭션이 '진행'중인 상태에서 변경 연산 결과를 데이터베이스에 갱신 요청(output() 연산 요청)
★ 장애 발생 시
⑴ 트랜잭션이 완료되기 전 장애 발생
=> undo
⑵ 트랜잭션이 완료 후 장애 발생
=> redo
checkpoint를 주기적으로 검사하여 검사 시점부터 검사하도록
검사 시점에 다음의 작업을 수행
① 메인 메모리(로그 버퍼)에 있는 모든 로그 레코드를 디스크에 기록
② 메인 메모리 버퍼에 있는 모든 변경 연산의 결과를 디스크에 있는 데이터베이스에 반영
③ 검사 시점을 표시하는 <checkpoint, L> 로그 레코드를 로그 파일에 기록
- L은 현재 실행되고 있는 트랜잭션 리스트
여기까지는 기본적인 회복 기법.
< Three Phase>
※ 참고 Database Management Systems, 3ed, R. Ramakrishnan and J. Gehrke
※ (즉시 갱신 회복 기법 기준)
Transaction Table
: active Xact들을 관리
- contains
XID, status(running/commited/aborted), lastLSN
Dirty Page Table (DPT)
: dirty page in buffer pool들을 관리
- contains
recLSN(first caused page to be dirty)
① Analysis
② REDO
③ UNDO
※ First Crash
① Analysis
LSN30 : T1 abort => UNDO LSN10, but already undone at CLR,40
LSN50(P1) , LSN20(P3), LSN10(P5) : dirty pages
LSN45 : T1 is cornpleted transaction
T2,T3 : Xact Transaction
② REDO
Nothing to consider
③ UNDO
UNDO T2 LSN 60
UNDO T3 LSN 50, T3 end (T3의 UNDO 종료)
T2를 UNDO하는 과정에 Crash 발생 & Restart
※ Second Crash
UNDO T2 LSN 20