1️⃣ 트랜잭션과 회복
트랜잭션은 데이터베이스 회복의 단위
입니다. 트랜잭션은 데이터의 변경 내용을 한순간에 모두 데이터베이스에 기록하지 않고, 일단 변경한 내용을 로그에 기록한 후
데이터베이스에 반영합니다. DBMS의 회복 관리자는 트랜잭션의 ACID 성질 중 원자성과 지속성을 보장하여 장애로부터 데이터베이스를 보호합니다
트랜잭션 수행 과정
- 트랜잭션이 시작하면 수행 상태가 됩니다
- 정상적으로 수행되면 COMMIT문을 만나 부분 완료됩니다
- 부분 완료 후 버퍼의 내용을 데이터 베이스에 기록하면 트랜잭션이 최종 완료됩니다.
- 만약 수행 중 문제가 생겨 완료 전에 실패하면 취소 과정을 거쳐 이제까지 진행한 작업을 거꾸로 되돌립니다. 변경된 데이터 중 혹시 데이터베이스에 이미 기록된 데이터가 있다면 로그를 이용하여 되돌립니다
- 부분 완료를 했으나 실패가 일어난 경우, 취소 과정을 거쳐 이제까지 진행한 작업을 거꾸로 되돌립니다.
2️⃣ 로그 파일
3️⃣ 로그 파일을 이용한 회복
데이터 변경 기록을 저장해 둔 로그 파일을 이용하면 시스템 장애도 복구할 수 있습니다.
시스템 운영 중 장애가 발생하여 시스템이 다시 가동되었을 때 DBMS는 로그 파일을 먼저 살펴봅니다. DBMS는 트랜잭션이 종료되었는지 혹은 중단되었는지 여부를 판단하여 종료된 트랜잭션은 종료를 확정하기 위하여 REDO
를 진행하고, 중단된 트랜잭션은 없던 일로 되돌리기 위해 UNDO
를 진행합니다.
REDO
장애가 발생한 후 시스템을 다시 가동을 했을 때, 로그 파일에 트랜잭션 시작(START)이 있고 종료(COMMIT)
가 있는 경우다. COMMIT 연산이 로그에 있다는 것은 트랜잭션이 모두 완료되었다는 의미다. 다만 변경 내용
이 버퍼에서 데이터베이스에 기록되지 않았을 가능성이 있다. 따라서 로그를 보면서 트랜잭션이 변경한 내용
을 데이터베이스에 다시 기록하는 과정이 필요하다. 이 과정을 REDO라고 한다.
UNDO
장애가 발생한 후 시스템을 다시 가동했을 때, 로그 파일에 트랜잭션의 시작(START)만 있고 종료(COMMIT)가
없는 경우다. COMMIT 연산이 로그에 보이지 않는다는 것은 트랜잭션이 완료되지 못했다는 의미로, 트랜잭션
이 한 일을 모두 취소해야 한다. 이 경우 완료하지 못했지만 버퍼의 변경 내용이 데이터베이스에 기록되어 있
을 가능성이 있기 때문에 로그를 보면서 트랜잭션이 변경한 내용을 데이터베이스에서 원상복구시켜야 한다.
이 과정을 UNDO라고 한다.
즉시 갱신 방법
즉시 갱신
은 '버퍼 → 로그파일', '버퍼 → 데이터베이스' 작업이 부분완료 전에 동시에 진행
될 수 있으며, 부분완료 전에 버퍼의 갱신 데이터는 로그에 기록이 진행이 된 상태이며 부분완료 전에 버퍼의 일부 내용이 실제 데이터베이스에 반영이 될 수 있습니다.
지연 갱신 방법
지연 갱신
은 갱신 데이터 → 로그가 끝난 후
부분 완료를 하고 버퍼 → 데이터베이스 작업이 진행되는 방법입니다.
Reference
https://mangkyu.tistory.com/30
https://goodmilktea.tistory.com/62
MYSQL로 배우는 데이터베이스 개론과 실습, 한빛 아카데미
Uploaded by Notion2Tistory v1.1.0