회복
장애가 발생했을 때 데이터베이스를 장애가 발생하기 전의 일관된 상태로 복구시키는 것
1. 장애의 유형
장애 failure
시스템이 제대로 동작하지 않는 상태
| 유형 | 의미 | |
| 트랜잭션장애 | 의미 | 트랜잭션 수행 중 오류가 발생하여 정상적으로 수행을 계속할 수 없는 상태 |
| 원인 | 트랜잭션의 논리적 오류, 잘못된 데이터 입력 등등 | |
| 시스템 장애 | 의미 | 하드웨어의 결함으로 정상 수행이 안되는 상태 |
| 원인 | 하드웨어 이상으로 메모리 손실 혹은 교착 상태 등등 | |
| 미디어 장애 | 의미 | 디스크 장치의 결함으로 디스크에 저장된 데이터베이스 손상 등등 |
| 원인 | 디스크 헤드의 손상, 고장 등등 | |
2. 데이터베이스의 저장 연산
데이터베이스는 기본적으로 저장 장치에 저장되며, 저장 장치에 장애가 발생시 대응 방법을 세 종류로 분류한다
| 저장 장치 | 설명 | |
| 휘발성 volatile 저장 장치 = 소멸성 |
의미 | 장애가 발생하면 저장된 데이터가 손실됨 |
| 예시 | 메인 메모리 등 | |
| 비휘발성 nonvolatiole 저장 장치 = 비 소멸성 |
의미 | 장애가 발생해도 저장된 데이터가 손실되지 않음. 단, 디스크 헤더 손상등 물리적 문제는 논외 |
| 예시 | 디스크, 자기 테이브, CD 등 | |
| 안정 stable 장치 | 의미 | 비휘발성 저장 장치를 이용해 데이터 복사본 여러 개를 만드는 방법 어떤 장애가 발생해도 데이터가 손실되지 않고 데이터를 영구적으로 저장할 수 있음 |
일반적으로 데이터베이스는 비휘발성 저장 장치에 상주하다가 트랜잭션이 데이터베이스의 데이터를 처리할때 메인 메모리로 가져온 후 처리하고 다시 디스크로 보내는 작업을 하게 된다
디스크와 메모리간의 데이터 이동을 대부분 블록 단위로 수행된다
디스크에 있는 블록을 디스크 블록이라 하고 메인 메모리에 있는 블록은버퍼 블록이라고 한다
디스크와 메인 메모리간의 데이터 이동은 다음 두 연산으로 수행된다
- input(x)
디스크 블록에 저장되어 있는 데이터 x를 메인 메모리 버퍼 블록으로 이동시키는 연산 - output(x)
메인 메모리 버퍼 블록에 있는 데이터 x를 디스크 블록으로 이동시키는 연산
응용 프로그램에서 트랜잭션의 수행을 지시하면 메인 메모리 버퍼 블록에 있는 데이터를 프로그램의 변수로 가져오고, 데이터 처리 결과를 저장한 변수 값을 메인 메모리 버퍼 블록으로 옮기는 작업이 추가로 필요하다
- read(x)
메인 메모리 버퍼 블록에 저장되어 있는 데이터 x를 프로그램의 변수로 읽어오는 연산 - write(x)
프로그램의 변수 값을 메인 메모리 버퍼 블록에 있는 데이터 x에 기록하는 연산
read를 할려면 input이 먼저 필요하며, output을 하기 위해서는 먼저 write를 요구한다
3. 회복 기법
회복
데이터베이스에 장애가 발생시 장애 이전 상태로 복구시키는 것
DBMS의 회복 관리자 = recovery manager가 담당한다
회복 관리자는 장애 발생을 탐지하고, 장애 탐지시 복구 기능을 제공한다
회복을 위한 연산
데이터베이스 회복의 핵심 원리는 데이터 중복이다
데이터를 별도의 장소에 미리 복사해 두고, 장애로 문제가 발생했을 때 복사본을 이용해 원래의 상태로 복원하는 것이다
- 덤프 drup
데이터베이스 전체를 다른 저장 장치에 주기적으로 복사하는 방법 - 로그 log
데이터베이스에서 변경 연산이 실행될 때마다 데이터를 변경하기 이전 값과 변경한 이후의 값을 별도의 파일에 기록하는 방법
데이터베이스 전체를 복사하는 덤프 방법은 하루에 한 번 또는 한 달에 한 번과 같이 미리 정해진 주기에 따라 수행한다
디스크와 같은 비휘발성 저장 장치에 데이터베이스 복사본을 저장한다
장애가 발생시 데이터베이스를 복구하는 기본 방법은 redo, undo 연산을 실행하는 것이다
- redo 재실행
가장 최근에 저장한 데이터베이스 복사본을 가져온 후 로그를 이용해복사본이 만들어진 이후에 실행된 모든 변경 연산을 재실행하여 장애가 발생하기 직전의 데이터베이스 상태로 복구
= 전반적으로 손상된 경우에 사용 - undo 취소
로그를 이용해 지금까지 실행된 모든 변경 연산을 취소하여 데이터베이스를 원래의 상태로 복구
= 변경 중이었거나 이미 변경된 내용만 신뢰성을 잃은 경우에 사용
실제로 데이터베이스 관리 시스템은 복잡하고 효율적인 회복 기법을 사용한다
- 데이터베이스 회복 기법
- 로그 회복 기법
- 즉시 갱신 회복 기법
- 지연 갱신 회복 기법
- 검사 시점 회복 기법
- 미디어 회복 기법
- 로그 회복 기법
로그 회복 기법
데이터를 변경한 연산 결과를 데이터베이스에 반영하는 시점에 따라 즉시 갱신 회복기법과 지연 갱신 회복 기법으로 나뉜다
즉시 갱신 회복 기법 immediate update
트랜잭션 수행 중에 데이터를 변경한 연산의 결과를 데이터베이스 즉시 반영한다
장애 발생에 대비하기 위해 데이터 변경에 대한 내용을 로그 파일에도 기록한다
데이터베이스 회복 시 로그를 정상 사용하려면, 트랜잭션에서 데이터 변경 연산이 실행되었을 때 로그 파일에 로그 레코드를 먼저 기혹한 후 데이터베이스에 변경 연산을 반영해야 한다
장애 발생 시점에 따라 redo, undo 연산을 실행하여 데이터베이스를 복구한다
기준은 start로그가 존재하지만 commit 로그의 존재 여부에 따라 연산 방법의 차이가 나게 된다
지연 갱신 회복 기법 deferred update
트랜잭션이 수행되는 동안에는 데이터 변경 연산의 결과를 데이터베이스에 즉시 반영하지 않고 로그 파일에만 기록해두었다가, 트랜잭션이 부분 완료된 후에 로그에 기록된 내용을 이용해 데이터베이스에 한 번에 반영한다
트랜잭션이 수행되는 동안 장애가 발생될 경우 로그 기록을 버리면 데이터베이스가 원래 상태를 유지하게 된다
그렇기에 undo 연산은 사용하지 않고 redo 연산만 사용한다
검사 시점 회복 방법
로그 기록을 사용하고 일정 시간 간격으로 검사 시점 = check point를 만들어 둔다
장애가 발생시 가장 최근 검사 시점 이전의 트랜잭션에는 회복 작업을 수행하지 않고, 이후의 트랜잭션에만 회복 작업을 수행한다
범위가 검사 시점으로 정해지기에 회복 범위가 단축된다
위의 방법은 로그 전체를 대상으로 하면 너무 많은 시간이 걸리고 redo 연산이 필요 없는 경우에도 실행하게 된다
이 경우 검사 시점 회복 방법을 사용한다
미디어 회복 기법
전체 데이터베이스 내용을 일정 주기마다 다른 안전한 저장 장치에 복사해두는 덤프를 이용한다
디스크 장애가 발생하면 가장 최근에 복사해둔 덤프를 이용해 장애 발생 이전의 데이터베이스 상태로 복구한다. 그후 로그 내용을 바탕으로 redo연산을 시행한다
'공부 > 데이터베이스' 카테고리의 다른 글
| 10. 회복과 병행 제어 / 총 정리 (0) | 2025.09.15 |
|---|---|
| 10. 회복과 병행 제어 / 03 병행 제어 (0) | 2025.09.15 |
| 10. 회복과 병행 제어 / 01 트랜잭션 (0) | 2025.09.15 |
| 9. 정규화 / 총 정리 (1) | 2025.09.14 |
| 9. 정규화 / 02 함수 종속 / 03 기본 정규형과 정규화 과정 (0) | 2025.09.14 |