티스토리 뷰

데이터베이스는 구동 중 다양한 오류가 생길 수 있고, 좋은 데이터베이스는 이러한 오류를 문제없이 복구할 수 있어야한다.

 

  • Transaction Failure
    말 그대로 트랜젝션이 도중에 어떠한 작용으로 실패하는 경우이다.
  • System Crash
    하드웨어 전원이 나가는 등 시스템에 직접적인 타격을 받아서 오류가 발생하는 것을 말한다.
  • Disk Failure
    저장장치 하드웨어에 문제가 생겨서 발생하는 오류를 말한다. 이를 예방하기 위해 저장장치를 여러개의 물리적인 블록(block)으로 나누고 쓰기/읽기의 순서를 정해진 프로토콜을 따르도록 강제한다.

 

  1. 첫번째 블록에 쓰기를 수행한다.
  2. 1번이 끝나면 두번째 블록에 쓰기를 수행한다.
  3. 읽기는 2번까지 완전히 완료되면 수행한다.

 

물리적으로 나눈 블록이 서로 다른 값을 가지고있는게 밝혀지면 RAM 등 휘발성 저장장치가 가지고 있는 값을 사용해서 정확한 값을 얻어서 복구한다.

 

 

 

복구

DBMS는 오류가 발생했을 때 정상적인 상태로 돌아갈 수 있어야한다. 복구는 방법에 따라 Log 기반 복구, Page 기반 복구로 나뉜다.

 

Undo
Log에 기록된 값을 역으로 추적하거나 트랜젝션을 취소하여 가장 최근의 정상적인 상태로 되돌아가는 것을 말한다.
Redo
Undo로 가장 최근상태로 돌아간 후 오류가 발생한 트랜젝션을 다시 수행한다.

 

Log 기반 복구

트랜젝션이 연산을 실행할 때 마다 모든 변경사항을 기록하고 오류가 발생하면 기록된 Log를 추적해서 오류를 복구하는 방법이다. 자연갱신, 즉시갱신, 검사점갱신으로 세분화된다.

 

Log Buffering
Log는 보통 실제 DB에 쓰여지지 않고 휘발성 메모리(Buffer)에 기록되는데 이 Log를 관리하기 위한 프로토콜이 필요하다.
버퍼가 가득 차면 모든 Log를 저장장치에 저장한다.
Log Force연산이 수행될 때 저장장치에 저장한다.
트랜젝션 Ti가 commit되기 전에 모든 Log가 저장장치로 옮겨진다.

 

  1. 자연갱신
    방법
    트랜젝션이 종료할 때 까지 DB wirte 작업을 미루고, Log에만 값의 변화를 기록하다가 트랜젝션이 완료되면 Log에 있는 값을 토대로 실제 DB에 write작업을 수행한다.
    복구
    완료 (commit) 상태라면 Log에 있는 값을 가지고 Redo한다.
    미완료 (not commit) 상태라면 Log에 있는 값을 무시한다.

  2. 즉시갱신
    방법
    트랜젝션 도중 변화하는 값을 Log와 DB에 모두 기록한다. Log에는 이전 값과 새로운 값 모두 기록해서 추적할 수 있도록 한다.
    복구
    완료 (commit) 상태라면 Redo한다.
    미완료 (not commit) 상태라면 Log에 기록된 값을 추적해서 Undo 한다.

  3. 검사점갱신
    방법
    기존 Log 기반 복구작업이 모든 Log를 검사해야하기 때문에 시간이 오래걸리는 단점을 보완하기 위해서 나온 방법으로, 트랜젝션을 수행하는 중간중간 유효성을 검사해서 검사점(checkpoint)를 기록하는 방법이다. 복구할 때 검사점부터 다시 실행할 수 있기 때문에 시간이 절약된다.
    복구
    가장 최근 검사점으로 돌아가서 다시 수행한다.

 

동시성 제어기능 추가
checkpoint가 나올 때 까지 로그를 역으로 추적한다. 이 때 여러 트랜젝션이 동시에 실행되는 환경이었다면 어떤 트랜젝션은 이미 commit되었고, 어떤 트랜젝션은 아직 수행중일 수 있다. commit Ti 로그를 만나면 해당 트랜젝션을 redo list에 넣고, start Ti는 있지만 commit Ti가 없으면 undo list에 넣고 마지막에 undo와 redo를 한다.
이 때 undo list를 먼저 수행하고 redo list를 수행하는 것이 중요하다.

 

 

 

Page 기반 복구

Shadow paging이라고 하는 이 기법은 DB가 페이지 단위로 나누어진 점에서 착안한 방법이다. DB는 Shadow Page라고 하는 자신과 동일한 그림자 페이지를 가지고있고, 트랜젝션이 수행되는 동안 Shadow Page는 변경하지 않는다. 도중에 오류가 발생해서 복구해야되는 경우에 Shadow Page로 아예 DB를 변경해서 복구하는 방법이다.
트랜젝션이 정상적으로 완료되었다면 Shadow Page도 현재 자신과 동일하게 변경해서 계속 추적할 수 있도록 한다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함