[Database] 13 Recovery
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에 다시 반영되어야한다.
- 예시
- 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
- check point 이전에 commit된 트랜젝션 :
immediate update
- log file에 기록하기보다는
disk를 바로 작성
하는 방법이다. - commit point에 트랜젝션이 다다르기 전에 데이터베이스를 바로 업데이트한다.
- 트렌젝션 실패 시
UNDO
- immediate update는 모든 operation이 즉시 disk에 반영되므로, 트랜젝션 실패시 물리적 디스크를 실패 직전으로 되돌려야한다.
NO REDO
- 모든 operation이 바로 물리적 disk에 작성되므로, 트렌젝션 실패시, REDO할 필요가 없다.
-
예시
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를 회복한다
댓글남기기