제9장 복구 Recovery
2013. 09. 06
가천대학교 IT대학
컴퓨터미디어융합학과
목 차
9.1 개요 9.2 복구전략 9.3 로그 기법 9.4 그림자 페이지
익힘문제
9.1 개요
Database System 고장 시 문제점 1) 서비스 중단: 단기적.
ex. 은행 프로그램 고장 입출금 불가 2) 업무 마비: 장기적
ex. 은행 데이터베이스 붕괴 은행 기능 마비 대책
1) 수작업 서비스 제공
2) 데이터베이스의 고장 이전 상태로 복구:
backup
서비스 개시:
backup
이후제9.1장 복구 개요
복구관리기의 책임
트랜잭션의 원자성의 지속성 확보.
대책
WAL Write-Ahead-Logging 미완료 트랜잭션들: undo 완료한 트랜잭션들: redo Shadow paging
old page와 new page로 나누어 관리 Checkpointing
주기적으로 저장
9.2 복구전략
9.2.1 시스템 고장 고 장
전원 고장, 하드웨어 고장, 소프트웨어 고장 기억장치
휘발성: RAM 비휘발성:
1차 기억장치: cache, ROM, 2차: HDD on-line, 3차: Tape, CD off-line
안전 기억장치: ??
duplicate
고장의 분류
시스템 고장 : 주기억장치의 소멸 미디어 고장 : 2차 기억장치 오류 응용 프로그램 고장 :
트랜잭션의 논리적 오류 자연 재앙 :
화재, 홍수, 지진, 정전,, 부주의 :
운영자, 사용자의 실수,,,
태업, hacking :악의적인 접근에 의한 손상
복구:
고장 시 database를 고장 이전의 상태로 돌려놓는 것
제9.2장 자료처리 구조
9.2.1 자료처리 절차
다중 제어: 모든 컴퓨터에는 두 개 이상의 처리기 존재 - CPU: Main Memory 제어, 응용 프로그램,
- PPU: I/O 프로그램, DISK 등의 보조기억장치 제어.
응용 프로그램이 정상 종료해도(read, write는 정상), I/O에서 고장이면 오류(get, put에서 고장) 가능.
즉, 메인 메모리에서는 이상이 없어도, 보조기억장치에서 이상 발생 가능.
Read A A = A -100 Write A Read B
B = B + 100 Write B
메인 메모리: program I/O area, buffer 디스크: 제어장치 메모리, 블록
Read A A = A - 100 Write A Read B
B = B + 100 Write B
제9.2장 자료처리 구조
Main Memory
Database read
write
get
put load
store
Disk
record Block
- page - control
CPU
PPU
block block Transaction
program I/O area
버 퍼
block
트랜잭션의 읽기/쓰기와 블록 이동
Get(A), Put(A) : 물리 레코드 입출력
Read(A, a), Write(A, a) : 논리 레코드 입출력
제9.2장 자료처리 구조
트랜잭션의 원자성을 유지하는 갱신 절차
9.3 로그 기법
Log ?
Database 접근에 대한 모든 내용을 로그에 기록.
ex. DB 접근 시간, 접근한 사람, 프로그램, 접근 내용,,,, 고장 발생 시 로그를 이용하여 Database를 복원
WAL
write-ahead-log: 복구의 원칙 로그 엔트리
- 트랜잭션 ID, 동작 이름, 참조된 객체(option),
동작 전의 객체의 값(option), 동작 후의 객체의 값
제9.3장 시스템 로그 기법
9.3 시스템 로그 기법
Log 구조
LSN: log sequence number. 로그 레코드의 식별자 prevLSN: 앞 레코드 연결용
transaction ID: 로그 레코드 생성 T type: 로그 레코드의 종류
pageID: T에 의하여 수정된 페이지의 id
offset, length: 수정된 부분의 오프셋과 길이
prevLSN transID type pageID length offset before image
after
image
모든 레코드 공통 type에 따라 추가되는 필드
제9.3장 시스템 로그 기법
로그의 기본 개념
고장 발생과 로그 정보
read A
A = A – 500 write A
read D T
1read B
B = B + 500 write B
T
2read C
C = C – 500 write C
read B
B = B + 500 write B
T
3<T
1,A,1000,500>
<T
2,B,2000,2500>
<T
2,commit>
<T
3,C,3000,2500>
<T
3,B,2500,3000>
<crash>
Log redo
undo
A = 1000 B = 2000 C = 3000
9.3.1 지연갱신 로그
고장이 많을 것이라는 가정에서,
트랜잭션이 정상 완료될 때까지 로그만 기록하고, Database 갱신을 지연하는 기법.
지연갱신 로그의 처리 절차 트랜잭션 실행 시
로그만 기록 정상 완료 시:
로그 정보로 DB 갱신 미 완료 시:
로그를 무시하고, 트랜잭션 재 실행
제9.3장 시스템 로그 기법
redo(Ti):
트랜잭션의 정상 완료 시,
트랜잭션 Ti가 갱신하려는 자료의 값들을 새로운 값으로 갱신
18
지연갱신 로그와 데이터베이스 상태
제9.3장 시스템 로그 기법
read A
A = A – 500 write A
T1
read B
B = B – 700 write B
read C
C = C + 700 write C
T2
A = 1000, B = 2000, C = 3000
<T2, start>
<T1, start>
<T2, B, 1300>
<T1, A, 500>
<T1, commit>
<T2, C, 3700>
<T2, commit>
지연 갱신 Log1
<T2, start>
<T1, start>
<T2, B, 1300>
<T1, A, 500>
<T1, commit>
<T2, C, 3700>
<T2, commit>
<crash>
지연 갱신 Log2
<T2, start>
<T1, start>
<T2, B, 1300>
<T1, A, 500>
<T1, commit>
<T2, C, 3700>
<crash>
지연 갱신 Log3
<T
2, start>
<T
1, start>
<T
2, B, 1300>
<T
1, A, 500>
<T
1, commit>
<T
2, C, 3700>
<T
2, commit>
.
지연 갱신 Log
1A=1000, B=2000, C=3000 .
. . A=500
B=1300, C=3700
데이터베이스 상태
9.3.2 즉시갱신 로그
고장이 적을 것이라는 가정
일단 로그와 DataBase를 갱신한 후,
고장이 발생하면 로그의 정보를 이용하여 DataBase를 복 구.
20
즉시 갱신 로그와 데이터베이스 상태
제9.3장 시스템 로그 기법
<T2, start>
<T2, B, 2000, 1300>
<T2, C, 3000, 3700>
<crash>
즉시 갱신 Log1
<T2, start>
<T2, B, 2000, 1300>
<T2, C, 3000, 3700>
<T2, commit>
<T1, start>
<T1, A, 1000, 500>
<crash>
즉시 갱신 Log2
<T2, start>
<T2, B, 2000, 1300>
<T2, C, 3000, 3700>
<T2, commit>
<T1, start>
<T1, A, 1000, 500>
<T1, commit>
<crash>
즉시 갱신 Log3
<T
2, start>
<T
1, start>
<T
2, B, 2000, 1300>
<T
1, A, 1000, 500>
<T
1, commit>
<T
2, C, 3000, 3700>
. .
즉시 갱신 Log
2A=1000, B=2000, C=3000 .
B=1300 A=500
. C=3700
.
데이터베이스 상태
undo(Ti):
Ti가 갱신하려는 자료의 값들을 옛 값으로 복원.
redo(Ti):
Ti가 갱신하려는 자료의 값들을 새로운 값으로 갱신.
프로그램
지역변수
버 퍼 블록 A
블록 B 블록 C
물리 블록 a b
900 2100
A=1000 B=2000 A: 1000,900
B: 2000,2100
undo(T1)
2800
C: 3000,2800 C=2800 c
redo(T2)
9.3.3 Checkpoint/Restart
전체 로그 파일을 탐색: 시간 대량 소요.
redo()할 트랜잭션들은 대부분은 이미 데이터베이스를 갱 신.
또 redo()를 실행하는 것은 대부분 낭비.
제9.4장 Checkpoint
[표 9.1)] 검사점에서 수행하는 작업
번호 자료 항목 내 역
1 트랜잭션 정시 검사점에서 실행 중인 모든 트랜잭션을 일시 정지
2 로그 출력 모든 로그 레코드들을 안전 기억장치에 출력
3 버퍼 출력 주기억장치의 모든 버퍼 블록들을 디스크에 출력
4 검사점 출력 검사점 레코드를 로그에 저장하고 안전기억장치에 출력
5 트랜잭션 재실행 다시 트랜잭션들을 정상적으로 가동
Backup:
- 특정한 시간에 DB 내용의 충분한 복사.
- 백업시의 DB와 동일하게 복구 가능 Checkpoint:
- 디스크의 DB 상태를 강제적으로 모든 완료된 트랜잭션들 과 일치하도록 하는 연산.
- 디스크를 최신 상태로 유지하려는 것.
DBS는 파일들을 메모리에 두고 필요할 때 디스크를 갱신 하려,,
검사점에 의한 재 시작 절차
제9.4장 Checkpoint
<T
5, start>
<T
5, B, 2000, 1000>
<T
5, A, 2000, 8000>
<checkpoint>
<T
5, C, 3000, 2000>
<T
5, commit>
<T
6, start>
<T
6, A, 8000, 5000>
<T
6, commit>
<T
7, start>
<T
7, C, 2000, 3000>
<crash>
즉시 갱신 Log
2후진 탐색 분석 Redo(T
i) Undo(T
i)
[표 9.2)] 고장 시점에서 수행하는 복구 작업
복구 작업 내역
1 로그 파일을 후진 탐색하여 검사점 <checkpoint> 레코드 탐색
2 검사점 이전에 시작한 트랜잭션의 첫 로그 레코드의 <Ti, start> 탐색 3 검사점부터 로그의 끝까지 복구를 위한 분석 시작
4 검사점에서 로그 파일의 끝까지 redo(Ti) 실행
5 로그 파일을 후진 탐색하여 검사점까지 undo(Ti) 실행
DBMS 고장 시 복구:
- 백업과 체크포인트 이용 디스크 고장 시:
- 백업 상태에서 다시 가동.
복구의 목표
- 시스템이 손상되었을 때의 상태로 복구. 또는 - 완료된 트랜잭션들의 갱신들을 디스크에 반영.
제9.4장 Checkpoint
검사점이 있는 로그 파일
<T
5, start>
<T
5, B, 1000>
<T
5, A, 8000>
<checkpoint>
<T
5, C, 2000>
<T
5, commit>
<T
6, start>
<T
6, A, 5000>
<T
6, commit>
<T
7, start>
<T
7, C, 3000>
<crash>
Log
1<T
5, start>
<T
5, A, 2000, 1000>
<T
5, B, 2000, 8000>
<T
5, C, 3000, 2000>
<checkpoint>
<T
5, commit>
<T
6, start>
<T
6, B, 8000, 5000>
<T
6, commit>
<T
7, start>
<T
7, D, 2000, 3000>
<crash>
Log
29.4 Shadow Page
제9.4장 Checkpoint
그림자 페이지 및 현행 페이지 테이블
30
9.5 익힘 문제
1) 데이터베이스에서 고장 발생 시 반드시 복구시킬 수 있는 방법이 존재하는가? 있으면 방법을 설명하시오.
2) 안전 기억장치는 어떤 기능을 하며, 어떻게 만들 수 있는가?
3) WAL의 개념을 설명하시오.
4) log의 목적은 무엇인가?
5) 트랜잭션은 정상적으로 처리되었는데 입출력장치의 회로 고장으로 디스크에 반영이 되지 않았다면 어떻게 복구할 수 있는가?
6) 로그 파일의 구조를 설명하시오. 어떤 자료를 로그에 저장해야 하는 가?
7) 지연갱신 로그와 즉시갱신 로그의 개념 상의 차이점을 기술하시오.
8) 두 기법이 가장 잘 적용되는 응용분야를 설명하시오.
9) redo()와 undo()의 기능을 설명하시오.
10) Checkpoint의 개념을 설명하시오.
11) Checkpoint에서 수행하는 작업을 설명하시오.
12) Backup이 복구에 어떤 도움이 되는지 설명하시오.
13) 그림자 페이지 기법과 로그 기법의 장단점을 비교하시오.
각각 가장 적합한 응용분야를 설명하시오.
제9.5장 익힘 문제