컴퓨터공학/데이터베이스

[데이터베이스] 회복

NIMHO 2022. 11. 25. 23:50
728x90

복습하기 위해 학부 수업 내용을 필기한 내용입니다.
이해를 제대로 하지 못하고 정리한 경우 틀린 내용이 있을 수 있습니다.
그러한 부분에 대해서는 알려주시면 정말 감사하겠습니다.

지난 글에 이어서 작성해 보도록 하겠습니다.

2022.11.25 - [컴퓨터공학/데이터베이스] - [데이터베이스] 무결성, 보안

 

[데이터베이스] 무결성, 보안

복습하기 위해 학부 수업 내용을 필기한 내용입니다. 이해를 제대로 하지 못하고 정리한 경우 틀린 내용이 있을 수 있습니다. 그러한 부분에 대해서는 알려주시면 정말 감사하겠습니다. ▶무결

dhalsdl12.tistory.com

회복(recovery)

데이터 저장장치

  • 휘발성 저장장치(volatile storage)
    • 메인 메모리
    • 시스템 고장저장된 정보가 유실된다.
  • 비휘발성 저장장치(nonvolatile storage)
    • 디스크나 자기 테이프
    • 시스템 고장 시에도 저장된 정보는 손실되지 않는다.
    • DB에서 디스크가 많이 사용된다.
    • 자기 테이프는 백업용으로 사용된다.
  • 안전 저장장치(stable storage)
    • RAID 시스템 : 서로 다른 디스크 블록 사본을 저장한다.

 

데이터베이스 입출력 연산

디스크와 메인 메모리 사이의 블록 이동

  • Input(Bi)
    • 데이터 Bi가 포함되어 있는 디스크 블록을 메인 메모리로 이동
    • 요청에 의해 (on demand)
  • Output(Bi)
    • 데이터 Bj가 포함되어 있는 버퍼 블록을 디스크 블록에 이동시켜 기록
    • 버퍼 관리자에 의해 (by buffer manager)

 

장애와 회복 시스템

회복이란?

장애가 일어났을 때 데이터베이스를 장애 발생 이전의 일관된 상태(consistent state)로 복원시키는 것

  • 일관된 상태란?
    • 데이터베이스에 오류나 모순이 없는 상태
  • 장애(failure)란?
    • 시스템이 정해진 명세대로 작동하지 않는 상태를 말한다.
    • 장애의 원인
      • 내부적 문제(프로그램 오류, 하드웨어 결함, 소프트웨어의 결함)
      • 외부적 문제(화재, 정전)

 

회복의 개념

회복의 기본 원리 : 데이터의 중복(data redundancy) 저장 -> 백업용으로 왕창 저장해두는 거라서 중복이다.

  • 덤프(dump)
    • 주기적으로 DB 전체를 다른 저장 장치로 복제(archive)
  • 로그(log)
    • DB가 변경될 때마다 이전 값(old value)과 이후 값(new value)을 별도의 로그 파일에 저장해 두는 것
    • 일지(journal)라고도 한다.

장애 발생 시 회복을 위해 REDOUNDO를 취할 수 있다.

 

REDO(재수행)

DB 내용 자체가 손상된 경우에 사용한다.

복사본과 로그파일을 이용해 복구하는 것이다.

가장 최근에 덤프 받은 복사본을 적재시킨 뒤, 이 복사본 이후에 일어난 변경만을 로그를 이용해 재수행 한다.

 

UNDO(취소)

DB 내용 자체는 손상되지 않았지만, 변경된 내용에 대한 신뢰성을 잃어버린 경우에 사용한다.

로그 파일을 이용하여 모든 변경된 사항들을 취소시킨다.

DB를 원래의 상태로 복원시킨다.

728x90

데이터베이스 로그를 이용한 회복

데이터베이스 로그(database log)

  • 데이터베이스 변경에 대한 기록으로 가장 많이 사용
  • 로그를 구성하는 레코드
    • 트랜잭션 ID, 데이터 항목, 이전 값, 이후 값

로그 레코드의 유형

  • <Ti, start> : 트랜잭션 Ti가 시작될 때 기록되는 로그 데이터
  • <Ti, X, V1, V2> : Ti의 데이터 항목 x를 이전 값 V1에서 이후 값 V2로 변경을 나타내는 로그 데이터
  • <Ti, commit> : Ti가 모든 갱신을 성공적으로 완료 
  • <Ti, abort> : Ti의 철회를 나타내는 로그 데이터, 모든 변경 사항을 취소

 

즉시 갱신(immediate update) 회복 기법

데이터 변경 연산이 발생할 때마다 데이터 변경 결과를 즉시 데이터베이스에 반영하는 것

  • 데이터베이스뿐만 아니라 로그 파일에도 변경 내용을 함께 저장하게 된다.

트랜잭션 수행 중에 실패 발생해 트랜잭션을 철회할 때

  • 로그 파일을 참조해 UNDO 작업을 수행한다.
    • 트랜잭션이 실행되기 전 상태의 데이터 값으로 복원
    • 로그 레코드 값 중에서 이전 값이 사용된다.
    • 로그 레코드 형식

수행 과정

  • 트랜잭션 Ti가 실행 시작
  • 로그에 <Ti, start> 레코드 기록한다.
  • 트랜잭션이 Write를 실행할 경우
    • 로그에 적절한 로그 레코드 기록 후 Output 연산 실행한다.
  • Ti가 부분 완료할 경우
    • 로그에 <Ti, commit> 레코드가 기록된다.
    • 로그가 DB 회복에 사용될 수 있기 위해서 로그 레코드가 기록되기 전에 DB가 갱신되어서는 안 된다.
    • 로그 레코드를 안정 저장소에 기록 후 Output(B) 실행한다.

즉시 갱신의 회복 예

  • 장애가 일어나면 회복 기법은 로그를 참조하여
    • 로그에 < Ti , start> 레코드만 있고 < Ti , commit> 레코드가 없으면 Ti는 UNDO 되어야 한다.
    • 로그에 < Ti , start> 레코드와 < Ti , commit> 레코드가 모두 다 있으면 Ti는 REDO 되어야 한다.
  • 회복 기법 적용의 예
    • T1이 commit 하기 직전에 시스템 붕괴
      • UNDO(T1) 실행 : A=1000, B=2000
    • T2가 commit 하기 직전에 시스템 붕괴
      • UNDO(T2) 실행 후 REDO(T1) 실행 : A=950, B=2050, C=700
    • T2가 < T2 , commit> 로그 레코드 출력 직후 시스템 붕괴
      • REDO(T1), REDO(T2) 실행 : A=950, B=2050, C=600

 

지연 갱신(deffered uodate)의 회복

지연 갱신 회복

  • 트랜잭션이 부분 완료될 때까지 모든 변경 내용을 로그 파일에만 저장하고, 데이터베이스에 저장하는 것은 지연한다.
    • 부분 완료 상태에 이르면 로그 파일에 저장된 변경 내용을 데이터베이스에 반영한다.
    • 만일 트랜잭션 실행이 완료 전 장애가 발생하면 로그에 있는 정보는 그냥 버리고 무시하면 된다.
    • 따라서 UNDO 연산이 불필요하다.
  • REDO 연산만 수행되므로 로그 레코드에는 이전 값 필드가 없어도 된다.
  • 즉, 로그 레코드 : <트랜잭션 ID, 데이터 항목, 변경된 값>으로 구성된다.

 

지연 갱신의 회복 예

로그에 <Ti, start> 레코드만 있고 <Ti , commit> 레코드가 없으면 DB에 저장된 내용이 없어서 로그 레코드를 폐기한다.

로그에 <Ti, start> 레코드와 <Ti , commit> 레코드가 모두 있으면 Ti는 REDO 연산을 실행해 로그 값들로 DB를 갱신한다.

지연 회복 기법 적용의 예

  • T1이 Commit 하기 직전에 시스템 붕괴
    • 아무런 조치가 필요 없다.
  • T2가 Commit 하기 직전에 시스템 붕괴
    • REDO(T1)만 실행 : A=950, B=2050, C=700
  • T2가 <T2 , Commit> 로그 레코드 출력 직후 시스템 붕괴
    • REDO(T1), REDO(T2) 실행 : A=950, B=2050, C=600

검사 시점 회복

로그를 이용하는 기법에서는 REDO와 UNDO 되어야 할 트 랜잭션을 결정해야 하는데,

이를 위해서는 원칙적으로 로그 전체를 분석해야 한다.

이것은 시간이 너무 많이 걸리게 될 뿐만 아니라 할 필요가 없는 REDO 연산을 반복적으로 해야 되는 문제가 발생한다.

이러한 문제를 해결하기 위한 방법이 검사 시점(checkpoint) 방법이다.

이 방법은 트랜잭션을 수행하는 동안 일정 간격으로 검사 시점을 만들어 놓는다.

T1은 c 이전에 실행을 완료하였으므로 회복 작업을 할 필요가 없다.

T2는 c 이전에 시작하여 f 이전에 완료하였으므로 c 이후에 발생한 변경 부분에 대해서만 REDO 연산을 수행해야 된다.

T3는 c 이후에 시작하여 f 이전에 완료하였으므로 트랜잭션 전체에 대해 REDO 연산을 수행해야 된다.

T4는 c 이전에 시작했으나 f까지 트랜잭션이 미완료되었으므로 트랜잭션 전체에 대해 UNDO 연산을 수행해야 된다.

특히, T4는 c 이전에 수행했던 변경 부분도 UNDO에 포함시켜야 된다.

T5는 c 이후에 시작하여 f까지 트랜잭션이 미완료되었으므로 트랜잭션 전체에 대해 UNDO 연산을 수행해야 된다.

 

미디어 회복(media recovery)

  • 지금까진 휘발성 저장 장치만 고려
  • 비휘발성 저장 장치(디스크)의 내용이 손상되는 경우?
  • 미디어(디스크) 회복의 기본 개념
    • DB 내용 전체를 주기적으로 다른 안전 저장장치에 덤프(dump)
    • 미디어 장애가 발생되었을 때
      • 가장 최근의 덤프를 이용해서 장애 발생 이전의 어떤 일관된 데이터베이스 상태로 복구한 후
      • 로그를 이용해서 가장 최근의 일관된 상태로 데이터베이스를 복원시킴
  • 최근: 디스크 이중화 및 삼중화
728x90