데이터베이스 기초
트랜잭션 T1~T5가 있고, 장애가 발생하기 전에 체크포인트를 한 번 잡았다. T1은 체크포인트 전에 시작하여 커밋했다. T2와 T3는 체크포인트 전에 시작했으며, T2는 체크포인트 후 장애 전에 커밋했고, T3는 장애 시점에 커밋하지 않았다. T4와 T5는 체크포인트 후에 시작했으며, T4는 장애 전에 커밋했고, T5는 커밋하지 않았다. 장애 후의 복구에서 로그를 사용하여 롤포워드해야 하는 트랜잭션은?
- AT3와 T5
- BT1, T2, T4
- CT2와 T4
정답과 해설 보기
정답: C. T2와 T4
체크포인트에서는 그 시점까지 메모리상에서 갱신된 데이터베이스의 페이지를 저장 장치에 쓰고, 그 사실을 로그에 기록합니다. 그래서 체크포인트보다 전에 커밋한 T1의 갱신은 이미 데이터베이스 본체에 반영되어 있어 복구 처리가 필요 없습니다. 체크포인트 후 장애 전에 커밋한 T2와 T4는 커밋은 완료되었는데 갱신의 일부가 본체에 쓰이지 않았을 가능성이 있으므로, 로그의 갱신 후 값을 사용하여 다시 수행합니다(롤포워드). 장애 시점에 커밋하지 않았던 T3와 T5는 본체에 쓰인 도중의 갱신이 있으면 로그의 갱신 전 값을 사용하여 취소합니다(롤백). T3처럼 체크포인트 전에 시작한 트랜잭션도 커밋하지 않았다면 취소 대상입니다. 체크포인트를 잡아 두면 로그를 처음부터 모두 따라갈 필요가 없어져 복구 시간이 짧아집니다.