업데이트:

태그: ,

카테고리:

Recovery

정의

  • 모든 트랜젝션은 atomic(all-or-nothing)으로 수행되어야한다.
  • 그런데, 트랜젝션 도중, 이후에 물리적,비물리적 손상이 발생해 트랜젝션이나 시스템에 문제가 발생하면 어떻게 처리되어야할까?
  • 데이터베이스는 기본적으로 트랜젝션 도중 시스템이 손상되면 손상시점 이전 가장 최근의 conssistent state로 복구된다.
  • 그래서 DB는 일반적으로 system log에 트랜젝션에 의한 data들의 변화를 기록해둔다.


  • committed transaction
    • 성공적으로 실행이 완료된 트랜젝션을 의미한다.
    • recovery manager는 committed된, 실행이 완료된 트랜젝션에만 관심있다.
    • 앞선 transaction processing 장에서 SQL TRANSACTION - SQL COMMIT블럭에서의 COMMIT과 일맥상통한다.
    • SQL COMMIT이 실행되면 내부 블럭의 atomic한 transaction 1개는 수행이 완료된 것이며, commited transaction으로 불린다.
    • commited transaction이 종료된 시점, commit된 시점을 commit pointㄹ고 부른다.


  • commit point
    • 트랜젝션의 모든 명령이 성공적으로 수행되고, log file에 저장되었다.


  • check point
    • 일정한 주기로 DBMS 버퍼에서 수정된 사항을 disk에 작성하는 시점을 의미한다.
    • check point이전의 log는 모두 disk에 반영되었으므로, redone될 필요가 없다.



Recovery 종류

  • UNDO : disk에 반영된 변화를 취소
  • REDO : check point로 돌아가 check point에서부터 log file 다시 수행

deferred update

  • 업데이트(disk 작성)을 연기한다.
  • transaction의 모든 operation을 log file에 기록하고,
  • commit-point 이후에 log file에 기록된 disk에 persistent하게 저장한다.


  • transaction 실패시
    • NO UNDO
      • deferrd update는 모든 operation이 log file에 저장된다는 것을 기억하자.
      • 상황 : commit point이전에 transaction이 실패하면
      • operation이 disk에 영향주지 않았으므로, UNDO할 필요가 없다.
    • REDO
      • commit되어 log file에 작성된 operation들은 disk에 반영되기 이전이다.
      • 상황 : transaction이 commit되었지만, 이후에 log file이 disk 반영되기전에 시스템이 오류난 경우
      • DBMS는 transaction 실패 시, CHECK POINT로 돌아간다.
      • 따라서, log file의 변화들이 disk에 다시 반영되어야한다.


  • 예시

스크린샷 2022-11-14 16 14 35

  • T1 : check point이전에 커밋이 완료되었으므로, check point에서 이미 disk에 반영되었을 것이다. 그러므로 NO REDO(redo할 필요가 없음)
  • T2 : T2는 check point 이후에 commit되었으므로, 아직 disk에 반영되기 이전에 log file의 형태로 남아있다. check point시점에 logfile들이 반영되어있지 않으므로 REDO(disk에 반영)되어야한다.
  • T3 : T3또한 T2와 동일하다.
  • T4 : log file이 남아있지만, commit되지 않아서 disk에 물리적으로 반영되어있지 않다. 따라서 IGNORE되고, ROLLBACK(트랜젝션 자체를 다시수행)된다.
  • T5 : T4와 동일

  • 시점에따라 어떻게 복구되는지 잘 이해해야한다.
  • 시스템 실패 시, Check point로 돌아간다는 것을 잘 기억해두고,
  • commit point 이후에 있는 checkpoint에서 log file을 disk에 반영한다는 것을 기억하자.


  • 정리
    • check point 이전에 commit된 트랜젝션 : NO REDO
    • check point 이후에 commit된 트랜젝션 : REDO
    • transaction 도중에 실패한 트랜젝션 : NO UNDO, ROLLBACK



immediate update

  • log file에 기록하기보다는 disk를 바로 작성하는 방법이다.
  • commit point에 트랜젝션이 다다르기 전에 데이터베이스를 바로 업데이트한다.


  • 트렌젝션 실패 시
    • UNDO
      • immediate update는 모든 operation이 즉시 disk에 반영되므로, 트랜젝션 실패시 물리적 디스크를 실패 직전으로 되돌려야한다.
    • NO REDO
      • 모든 operation이 바로 물리적 disk에 작성되므로, 트렌젝션 실패시, REDO할 필요가 없다.


  • 예시 스크린샷 2022-11-15 01 07 38

  • UNDO/NO REDO알고리즘
  • T1 : 무시, checkpoint기준, 모든 트랜젝션 안정적으로 수행.
  • T2 : NO REDO : 로그파일을 다시 REDO할 필요 없음.
  • T3 : NO REDO : 상동.
  • T4 : UNDO : 커밋되지 않은 트랜젝션은 All or Nothing
  • T5 : UNDO : 상동



Recovery 방법

  • Recovery는 system fail을 consistent한 db state로 복구하는 과정이다.
  • 물리적 손상
    • 2차 저장파일과 log file을 통해 commit된 트랜젝션을 다시 수행한다.
  • 비물리적 손상
    • log file만을 이용해 undo & redo 알고리즘으로 consistent DB state를 회복한다

댓글남기기