1. 트랜잭션들의 회복 처리 유형
REDO(재실행)과 UNDO(실행취소)가 있다.
지연 갱신은 undo를 하지 않으며 즉시 갱신은 redo와 undo를 사용한다.
지연갱신에서 트랜잭션에 의해 갱신된 값은 트랜잭션이 commit 될때 데이터베이스에 적용된다.
즉, commit 되지 않은 트랜잭션에 의한 갱신 값은 데이터베이스에 적용되지 않았으므로 그 전의 값을 갖고 있다.
그러므로 지연갱신에서는 undo를 하지 않는다.
<Tn, A, old, new>
old는 이전값을 new는 이후값을 의미한다(갱신)
검사점(체크포인트)를 기준으로 이전에 commit이 발생했다면 회복을 위해 어떤 작업도 수행할 필요 없다.
체크포인트 이후 commit 되었다면 갱신된 값을 인정하며 회복을 위해 redo 한다.
체크포인트 이후 값을 갱신했으나 commit되지 않은 채로 시스템이 실패하면 데이터베이스에 new 값이 적용되지 않고 회복을 위해 어떤 작업도 수행하지 않는다.
(장애 전 commit된 트랜잭션은 REDO를 수행하며 장애 전 commit되지 않은 트랜잭션은 회복을 위해
어떠한 조치를 수행하지 않아도 된다)
즉시 갱신 기법에서는
체크 포인트를 기준으로 이전에 commit된 작업에 대해서는 아무런 회복 조치를 취할 필요가 없이 저장이 보장되며
체크 포인트를 기준으로 이후 작업들은 commit 된 트랜잭션은 REDO하여 새로운 값을 갖도록 하고
commit 되지 않은 트랜잭션은 UNDO 하여 원래 값으로 복원시킨다.
검사점 이전 commit된 트랜잭션은 회복을 위해 어떤 작업을 할 필요가 없다
그러므로 T1은 제외된다
검사점과 시스템 고장 사이에 commit된 트랜잭션은 회복을 위해 재실행(redo)를 수행해야 한다
그러므로 t2, t3, t6은 재실행된다.
시스템 고장시까지 commit되지 않은 트랜잭션은 회복을 위해 실행취소(undo) 된다
그러므로 t4, t6은 실행취소 된다.
2. 로킹제어
- 로킹은 동일한 데이터 항목에 대한 여러 트랜잭션들의 동시 접근을 조정하기 위해 사용된다.
- 로크는 하나의 트랜잭션이 데이터를 접근하는 동안 다른 트랜잭션이 그 데이터를 접근할 수 없도록 제어하는데 쓰인다.
- 트랜잭션이 로크한 데이터에 대해서는 해당 트랜잭션이 종료되기 전에 해당 데이터에 대한 언로크를 실행해야 한다.
- 2단계 로킹 프로토콜은 로크를 요청하는 것과 로크를 해제하는 2단계로 이루어진다. 더 이상 로크를 요청하지 않을 경우 로크를 해제하게 된다
- 로킹의단위가 작아질수록 로크의 수가 많아서 관리가 복잡해지지만 병행성 수준은 높아지는 장점이 있다.
- 2단계 로킹 규약을 적용하면 트랜잭션의 직렬 가능성을 보장할 수 있지만 교착상태 발생을 막을 수는 없다. (교착상태란 두 개 이상의 트랜잭션들이 서로 상대방이 보유하고 있는 로크를 요청하면서 기다리고 있는 상태를 말한다)
'컴퓨터 일반 > 데이터베이스론' 카테고리의 다른 글
정규화 (0) | 2024.10.15 |
---|---|
관계 대수 정리하기 (4) | 2024.10.15 |
데이터베이스론 정리 (2) | 2024.10.15 |