파일 시스템의 한계

복구는 장애 직후 “어디까지 끝난 작업인가”를 판별하는 문제입니다

파일 수정 중 시스템이 멈추면 남은 값만으로는 정상 완료인지 부분 수정인지 판단하기 어렵습니다. DBMS는 변경 로그와 COMMIT 기록을 남겨 재시작 시 REDO 또는 UNDO를 결정합니다.

파일 시스템

파일 자체만 남으면 완료와 실패의 경계가 흐립니다

DBMS

로그와 COMMIT 기록이 복구 결정을 위한 기준이 됩니다

REDO COMMIT된 작업은 다시 적용합니다

장애 전에 완료된 트랜잭션의 변경이 데이터 페이지에 덜 반영됐다면 로그를 보고 재적용합니다.

UNDO COMMIT되지 않은 작업은 되돌립니다

중간에 멈춘 트랜잭션의 흔적은 원자성을 지키기 위해 취소합니다.

파일만 있을 때 완료 여부를 판별할 기록이 부족합니다

부분 수정, 중복 처리, 누락 처리 위험을 프로그램이나 사람이 따로 판단해야 합니다.

장애 전에 COMMIT 기록이 있음

START T1 UPDATE COMMIT REDO 대상

작업은 끝난 것으로 보고, 저장 장치 반영이 불완전하면 다시 적용합니다.

COMMIT 전에 장애가 발생함

START T2 UPDATE CRASH UNDO 대상

작업은 완료되지 않은 것으로 보고, 남아 있는 중간 변경을 취소합니다.

1 로그를 먼저 확인한다

DBMS는 데이터 파일의 현재 값만 보지 않고 변경 기록과 순서를 함께 봅니다.

2 커밋 여부로 나눈다

완료된 트랜잭션과 중간에 멈춘 트랜잭션을 서로 다르게 처리합니다.

3 일관된 상태로 재시작한다

재적용과 취소를 마친 뒤 데이터베이스는 믿을 수 있는 기준 상태로 돌아옵니다.