새소식

반응형
밥벌이/데이터베이스

데이터베이스 회복기법

  • -
반응형
  • 로그 기반 회복 기법
    • 지연 갱신 회복 기법
구분 내용
개념
  • 트랜잭션이 부분 완료 상태에 이르기까지 발생한 모든 변경 내용을 로그 파일에만 저장하고, 데이터베이스에는 Commit이 발생할 때까지 저장을 지연하는 기법
특징
  • 데이터베이스 회복 과정에서 UNDO는 필요 없음 : 트랜잭션 복구 시 로그 파일 내용만 폐기
  • UNDO가 필요 없기 때문에 로그 레코드는 <트랜잭션 id, 데이터 아이템, 이후 값> 형식을 가짐
구현
  • 트랜잭션 단위가 종료될 때까지 디스크에 기록하는 출력 연산을 지연시키고, 데이터베이스 변경 내역을 로그에 보관
  • 트랜잭션 완료(Commit) 시 로그를 이용해 지연된 출력 연산 수행
  • 회복 시 UNDO 연산을 수행할 필요 없이 REDO 연산만 실행
    트랜잭션 실행 중 시스템이 붕괴되거나 트랜잭션이 복구되면 로그에 있는 정보는 그냥 버리고 무시

   

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

  • 즉시 갱신 회복 예
    • 로그 파일 내용
로그(a)
<T0 start>
<T0, A, 1000, 950>
<T0, B, 2000, 2050>
시스템 장애
로그(b)
<T0 start>
<T0, A, 1000, 950>
<T0, B, 2000, 2050>
<T0 commit>
<T1 start>
<T1, C, 500, 600>
시스템 장애
로그(c)
<T0 start>
<T0, A, 1000, 950>
<T0, B, 2000, 2050>
<T0 commit>
<T1 start>
<T1, C, 500, 600>
<T1 commit>
시스템 장애
  • UNDO
    • 데이터베이스가 비정상 종료되었을 때, 디스크에 저장된 로그를 분석하여 트랜잭션의 시작은 있지마 COMMIT 기록이 없는 트랜잭션들의 작업을 취소함(UNDO)(즉, 로그를 이용하여 데이터베이스 내에서 해당 데이터 항목에 대해 이후 값을 이전 값으로 변경)
    • 로그(a)의 트랜잭션 T0와 로그(b)의 트랜잭션 T1은 트랜잭션의 시작은 있지만 COMMIT의 기록이 없으므로, 로그(a)에서는 A와 B의 값, 로그(b)에서는 C의 값에 대해서 로그를 사용하여 UNDO 작업이 수행(즉, A,B,C 각각에 대해서 로그를 사용하여 이후 값을 이전 값으로 대체)
  • REDO
    • 데이터베이스가 비정상 종료되었을 때 디스크에 저장된 로그를 분석하여 트랜잭션의 시작과 COMMIT 기록이 있는 트랜잭션들의 작업을 재작업(REDO)함(즉, 로그를 이용하여 데이터베이스 내에서 해당 데이터 항목에 대해 이전 값을 이후 값으로 변경)
    • 로그(b)의 트랜잭션 TQ는 로그에 트랜잭션의 시작이 있고 COMMIT된 기록이 있으므로, TQ의 트랜잭션에 대해 재작업(REDO) 수행
    • 로그©의 경우에 TQ와 T1 모두 트랜잭션의 시작과 COMMIT 기록이 있으므로 TQ, T1 모두에 대해 재작업을 수행
         
  • 체크 포인트 회복 기법
    • 체크 포인트 회복 기법 개념
구분 내용
개념
  • 트랜잭션 수행 중 발생하는 변경 내용을 로그 파일에 기록하고 일정 기간 단위로 체크포인트를 생성하여 수행
  • 회복 시 로그 파일의 정보를 모두 검사해야 하고, 이미 디스크에 반영된 변경에 대해서 불필요한 REDO 연산을 수행해야 하는 로그 기반 회복 기법의 문제점을 해결하기 위함
  • 장애 발생시에 체크 포인트 이전에 처리된 트랜잭션들은 회복 대상에서 제외되고, 체크 포인트 이후에 처리된 트랜잭션에 대해서만 회복 작업을 시행
체크포인트
  • 주기억 장치에 있는 모든 레코드들을 안정된 저장 장치와 로그에 저장
  • 트랜잭션 수행 중에 변경된 모든 버퍼 블록들을 안정된 저장 장치 로그에 저장
  • <checkpoint, L> (여기서 L은 체크포인트 시 활성화 상태에 잇는 트랜잭션들의 리스트를 의미> 로그 레코드를 안정된 저장 장치의 로그에 저장
회복 구현
  • 회복 시 복구 대상 트랜잭션 선정 과정
    • UNDO-리스트와 REDO-리스트를 비워 놓음
      • UNDO-리스트 = {}
      • REDO-리스트 = {}
    • 로그 파일을 끝에서 역방향으로 첫번째<checkpoint, L> 레코드를 만날 때까지 스캔
      • <Ti, commit> 레코드를 만나면, Ti를 REDO-리스트에 추가
      • <Ti, start> 레코드를 만나면, 만약에 Ti가 REDO-리스트 내에 존재하지 않으면 Ti를 UNDO-리스트에 추가
    • L내에 있는 모든 Ti에 대해서, 만약에 Ti가 REDO-리스트 내에 존재하지 않으면, UNDO-리스트에 추가
  • 로그를 이요하여 UNDO를 수행한 후 REDO를 수행
    • 가장 최근 레코드부터 로그를 역방향으로 스캔하면서 UNDO-리스트 내에 있는 모든 Ti에 대해서 <Ti, start> 레코드를 만날 때까지 UNDO를 수행
      • 역방향 스캔 중에 UNDO-리스트 내의 트랜잭션에 속하는 각 로그 레코드에 대해서 갱신된 값을 확인하여 로그 레코드의 이후 값으로 변경된 값을 이전 값으로 변경
    • 가장 최근의 <checkpoint, L> 레코드부터 마지막 로그 레코드 까지 로그를 순방향으로 스캔하며서 REDO-리스트 내에 있는 모든 Ti에 대해서 REDO를 수행
      • 순방향 스캔 중에 REDO-리스트 내의 트랜잭션에 속하는 각 로그 레코드에 대해서 갱신된 값을 확인하여 로그 레코드의 이후 값으로 변경되지 않은 값을 이후 값으로 변경

   

  • 체크 포인트 회복 기법에서 UNDO와 REDO대상을 쉽게 선정하는 방법
    • 체크 포인트 이전에 시작하여 체크포인트 이전에 완료된 트랜잭션은 회복 대상이 아니다.
    • 체크 포인트 이전, 이후와 관계없이 시작하여 시스템 장애 시간에 진행 중인 트랜잭션은 UNDO 대상이다.
    • 체크 포인트 이전, 이후와 관계없이 시작하여 시스템 장애 시간 이전에 완료된 트랜잭션은 REDO 대상이다.
  • 체크 포인트 회복 예
    • 로그 파일 내용
      <T0 start>, <T0, A, 0, 10>, <T0 commit>, <T1 start>, <T1, B, 0, 10>, <T2 start>, <T2, C, 0, 10>,<T2, C, 10, 20>,<checkpoint {T1, T2}>,<T3 start>, <T3, A, 10, 20>, <T3, D, 0, 10>, <T3 commit>, 시스템 장애
    • UNDO 대상
      T1, T2
    • REDO 대상
      T3
       
  • 그림자 페이징(Shadow Paging) 회복 기법
구분 내용
개념
  • 트랜잭션이 실행되는 동안 2개의 페이지 테이블(즉, 현재 페이지 테이블과 그림자 페이지 테이블)을 유지 및 관리하는 회복 기법
  • 데이터베이스를 일정 크기의 블록인 페이지 단위로 유지하고, 로그를 이용하지 않음
페이지 관리 방법
  • 트랜잭션 시작 시에 현재 페이지 테이블과 동일한 그림자 페이지 테이블을 생성하여 관리
    • 일반적으로 현재 페이지 테이블은 주기억 장치에 저장하고 그림자 페이지 테이블은 보조 기억 장치에 저장
  • 트랜잭션 실행 중 데이터 항목을 접근할 때는 현재 페이지 테이블만 사용
  • 트랜잭션이 변경 연산을 수행할 경우, 현재 페이지 테이블 내용만 변경되고 그리자 페이지 테이블 내용은 변경되지 않음
  • 트랜잭션이 완료될 경우, 현재 페이지 테이블의 내용을 그림자 페이지 테이블에 저장
트랜잭션 복구 방법
  • 변경된 현재 페이지 테이블을 폐기
  • 그림자 페이지 테이블을 현재 페이지 테이블로 설정(페이지 교체)
장점
  • 로그 레코드를 유지할 필요가 없음
  • 장애 이후 회복 처리가 불필요 : 새로운 트랜잭션은 그림자 페이지 테이블을 사용해 즉시 시작 가능
단점
  • 많은 페이지들의 I/O 작업으로 인해 트랜잭션 처리 비용이 많이 듬
  • 데이터가 페이지로 분할되어 디스크 내에 분산
  • 각 트랜잭션이 끝난 후 그림자 페이지들을 수집하여 미사용 페이지 리스트에 넣을 필요가 있음
  • 트랜잭션들이 동시에 실행되도록 알고리즘을 확장하기가 어려움

   

  • 미디어 회복 기법
구분 내용
개념
  • 디스크와 같은 비휘발성 저장 장치의 내용이 손상되는 장애 발생시 회복을 위한 기법
  • 백업, 미러링, RAID 등을 이용해 복구 가능
특징
  • 데이터베이스의 전체 내용을 안전한 저장소에 복사(덤프)하므로 대량의 데이터 전송 필요
  • 데이터 전송 도중 트랜잭션 중지로 CPU 낭비가 발생할 수 있음
회복 방법
  • 데이터베이스 내용 전체를 주기적으로 다른 안정적인 저장 장치에 덤프
  • 미디어 장애 시 가장 최근의 덤프한 데이터베이스를 로드하고, 로그 파일을 참조하여 덤프 이후에 commit된 모든 트랜잭션들에 대해서 REDO를 수행
  • UNDO는 수행되지 않음

 

반응형

'밥벌이 > 데이터베이스' 카테고리의 다른 글

성능 평가(Benchmarks)  (0) 2011.03.11
데이터베이스 회복의 개요  (0) 2011.03.10
트랜잭션 관리  (0) 2011.03.01
동시성(병행) 제어  (0) 2011.03.01
데이터 무결성  (0) 2011.02.20
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.