데이터베이스 장애 발생 시, 덤프와 로그를 통해 회복하는 기법에 대해 알아보겠습니다. 로그 회복기법에는 '즉시 갱신'과 '지연 갱신'이 있으며 이에 대해 살펴봅니다.
[ Contents ]
1. 데이터베이스 회복 작업
데이터베이스에서 장애 발생 시, 완료된 트랜잭션은 다시 실행(Redo)하고 중단된 트랜잭션은 실행 이전으로 돌아가는 작업(Undo)을 '회복'이라고 합니다.
이러한 회복 작업은 DB 갱신 방식에 따라 달라질 수 있습니다. DB 갱신 방식에는 '즉시 갱신'과 '지연 갱신'이 있으며 이는 아래에서 다뤄보겠습니다.
2023.04.25 - [Data Engineering] - [DB] 장애와 회복 기법 (Redo 재실행, Undo 취소)
(데이터베이스 장애 및 회복 작업 관련 글)
2. 즉시 갱신 (Immediate Update)
트랜잭션 실행 중 변경내역을 DB에 즉시 반영하는 방식
완료되지 않은 트랜잭션도 DB에 반영하므로, 장애 발생 시 트랜잭션 실행 이전으로 복구하는 Undo 작업이 필요합니다. 물론 완료된 트랜잭션을 반영하는 Redo 작업도 필요하죠.
<T1, Start>
<T1, A, 100, 200>
<T1, B, 200, 100>
<T1, Commit>
<T2, Start>
<T2, A, 100, 150>
Fail
즉시 갱신과 지연 갱신은 로그를 토대로 회복 작업을 진행하는, '로그 기반 회복기법'입니다. 장애로 인해 DB에 반영되지 않은 T1은 재실행(Redo)하고, 중간에 종료된 T2는 실행 이전으로 복구합니다. (Undo)
cf) <T1, A, 100, 200>: 트랜잭션 T1에서 A 값을 100에서 200으로 변경
3. 지연 갱신 (Deferred Update)
트랜잭션이 부분 완료될 때까지(Commit만 남겨둘 때까지) DB 반영을 지연시키는 방식
지연 갱신은 완료된 트랜잭션만 DB에 반영하므로, Undo 작업이 필요 없습니다. 오로지 Redo 작업만 하면 됩니다.
<T1, Start>
<T1, A, 200>
<T1, B, 100>
<T1, Commit>
<T2, Start>
<T2, A, 150>
Fail
또한 이전 값으로 되돌리는 Undo 작업이 필요없으므로, 이전 값(old value) 필드가 없어도 됩니다. 바뀐 값(new value)으로만 바꿔주면 됩니다. T1만 Redo 작업해줍니다. 그리고 T2는 로그 기록에서만 삭제합니다.
'CS > DB' 카테고리의 다른 글
[DB] 데이터베이스 병행(동시성) 제어 기법: 로킹, 기본적 2PL (0) | 2023.04.25 |
---|---|
[DB] 데이터베이스 동시성 제어(병행 제어)와 문제점 (0) | 2023.04.25 |
[DB] 데이터베이스 장애와 회복 기법 (Redo 재실행, Undo 취소) (0) | 2023.04.25 |
[DB] 트랜잭션의 특성(ACID, 원자성/일관성/고립성/영속성)과 상태 (0) | 2023.04.24 |
[DB] 데이터베이스 정규화 (제 1, 2, 3, 보이스/코드, 4, 5 정규형) (0) | 2023.04.24 |
댓글