회복 Recovery
데이터베이스 시스템에 장애가 발생하였을 때 장애가 발생하기 이전 시점의 상태로 복구시키는 것
장애 유형
- 트랜잭션 장애 : 트랜잭션의 논리적 오류 / 잘못된 데이터 입력 / 시스템 자원의 과다 사용 요구 / 처리 대상 데이터의 부재의 이유로 발생한다.
- 시스템 장애 : 하드웨어 이상으로 메인 메모리에 저장된 정보가 손실되거나 교착 상태가 발생한 경우 등
- 미디어 장애 : 디스크 자체의 결함으로 디스크에 저장된 데이터베이스의 일부 혹은 전체가 손상된 상태
- 통신 장애 : 네트워크 통신망의 결함
회복의 방법
1) 중복 기법
덤프 : 주기적으로 데이터베이스 전체를 다른 곳에 백업해둔다.
로그 : 데이터베이스에서 변경 연산이 일어날 때마다 데이터를 변경하기 전과 이후 값을 별도의 파일로 저장하는 것을 의미한다.
2) 회복 유형
Redo: 장애 이전 시점으로 데이터베이스를 복구한 후 로그를 이용해 특정 트랜잭션을 다시 수행하는 것이다.
Undo: 로그를 이용해 지금까지 실행했던 연산을 취소하여 원래 상태로 되돌리는 작업이다.
데이터베이스 로그
Redo와 Undo 연산을 위해 필요한 데이터베이스 변경 연산에 관한 기록
데이터를 변경하기 이전의 값과 변경한 이후의 값을 기록하며 레코드 단위로 기록된다.
로그 구성요소
트랜잭션 id | 자료 항목 id | 이전의 값 | 새로운 값 |
write 연산 작업을 지칭 | write 연산의 대상 자료를 지칭 | write 연산 이전의 값 | write 연산 이후의 값 |
로그 레코드의 종류
로그 레코드 | 설명 |
<Ti, start> | 트랜잭션 Ti가 수행을 시작함 |
<Ti, X, old, new> | 트랜잭션 Ti가 X 자료에 대해 old 값에서 new 값으로 변경하였음 |
<Ti, commit> | 트랜잭션 Ti가 연산을 성공적으로 수행하였음 |
<Ti, abort> | 트랜잭션 Ti의 연산이 중단되었음 |
ex) 은행 계좌 X에서 Y로 3000원의 송금이 있을 때,
- <T0, start>
- <T0, X, 5000, 2000>
- <T0, Y, 0, 3000>
- <T0, commit>
Deferred Update 지연 갱신 회복
트랜잭션이 수행되는 도중 데이터 변경 연산의 결과를 디스크에 있는 데이터베이스에 즉시 반영하지 않고 로그 파일에만 기록해두었다가, 트랜잭션이 부분 완료된 후에 로그 데이터를 이용하여 데이터베이스를 업데이트한다.
- 회복 방법
트랜잭션이 완료되기전에 장애가 발생한 경우
<T1, start>는 있지만 <T1, commit>는 없는 상황
아직 변경 연산 결과가 데이테베이스에 반영되지 않았으므로 Undo 연산을 할 필요가 없다. 따라서 로그 기록만 버리면 된다.
트랜잭션이 완료된 후에 장애가 발생한 경우
<T1, start>와 <T1, commit>이 있는 상황
해당 트랜잭션 이전 시점으로 복구했다면 해당 트랜잭션에 관한 로그를 이용하여 Redo 연산을 실행한다.
Immediate Update 즉시 갱신 회복
트랜잭션 수행 중에 데이터를 변경한 연산을 즉시 데이터베이스에 반영하는 것이다.
- 회복 방법
트랜잭션이 완료되기전에 장애가 발생한 경우
<T1, start>는 있지만 <T1, commit>는 없는 상황
변경된 데이터베이스에 대해 로그 기록을 이용하여 Undo 연산을 할 필요가 있다.
트랜잭션이 완료된 후에 장애가 발생한 경우
<T1, start>와 <T1, commit>이 있는 상황
해당 트랜잭션 이전 시점으로 복구했다면 해당 트랜잭션에 관한 로그를 이용하여 Redo 연산을 실행한다.
CheckPoint 검사 시점 회복
체크 포인트 회복은 로그를 일정 시간 간격으로 체크 포인트를 만들어 장애가 발생하면 가장 최근의 체크 포인트 시점으로 데이터 베이스를 복귀시킨다. 그 시점 이전에 완료된 트랜잭션은 복구할 필요가 없으며 이후 작업에만 복구 작업을 시행한다.
장애가 발생한 시점에서 아직 완료되지 않은 트랜잭션은 Undo를 실행하여 연산을 취소하고 체크 포인트 이후와 장애 발생 시점 사이에서 완료된 트랜잭션은 Redo를 실행한다.
그림자 페이지 기법
그림자 페이지 기법은 갱신 이전의 데이터베이스를 일정 크기의 페이지 다위로 구성하여 각 페이지마다 복사본의 그림자 페이지로 별도로 보관한다. 실제 페이지를 대상으로 트랜잭션 발생으로 변경 작업을 하다가 장애가 발생하면 회복 대상이 되는 페이지를 그림자 페이지로 대체하는 방법이다.
그림자 페이지 기법의 단위는 페이지이고 로그를 이용하여 회복을 하지 않는다. 초기 상태를 유지하는 그림자 페이지 테이블은 디스크에 저장되고 실행되고 있는 페이지는 주기억장치에 저장된다.
트랜잭션이 실행되기 시작할 때 현행 페이지 테이블을 복사하여 디스크에 그림자 페이지 테이블 복제본을 만든다. 트랜잭션이 실행되는 중간에 그림자 페이지 테이블은 변경되지 않는다.
- 장점
단일 사용자 환경에서 로그 레코드를 출력하는 오버헤드가 없기 때문에 디스크 접근 횟수를 줄인다.
- 단점
예전 페이지 테이블을 버리게 되면 갈비지 컬렉터가 필요하다.
페이지 테이블이 크면 복사하는 오버헤드가 증가할 수 있다.
덤프 (백업)
데이터베이스의 내용 전체를 주기적으로 다른 안전한 기억장치에 덤프 시키는 것을 말한다.
회복 수행시 가장 최근의 덤프를 디스크에 데이터베이스를 복구하고 로그를 이용하여 추가 복구를 수행한다.
'Computer Science 기본 지식 > 데이터 베이스' 카테고리의 다른 글
DB (7) 트랜잭션과 동시성 제어 (0) | 2021.05.14 |
---|---|
DB (6) 정규화 (0) | 2021.05.13 |
DB (5) SQL 언어 (0) | 2021.05.12 |
DB (4) 관계 데이터베이스 (0) | 2021.05.09 |
DB (3) 개체-관계 모델링 (0) | 2021.05.09 |