Inor

[DB] 트랜잭션 : Recovery(회복) 본문

Computer Engineering/Database

[DB] 트랜잭션 : Recovery(회복)

Inor 2017. 8. 14. 16:16

Recovery


 DBMS는 사용자의 요청이 있거나, 트랜잭션 수행 중에 오류로 인해서 시스템이 트랜잭션을 철회 하거나, 소프트웨어나 하드웨어 문제 때문에 시스템을 재시작 했을 경우에 복구 작업을 수행 합니다.




트랜잭션 복구


 시스템이 정상적으로 작동하고 있는 상황에서 트랜잭션을 철회하는 경우에는 어떻게 복구를 진행 하는지 알아보도록 하겠습니다. 먼저 로그 데이터를 역방향으로 탐색 하면서 해당 트랜잭션에서 수행 했던 일을 찾습니다. 그리고 그것을 undo 복구를 통해서 이전의 상태로 돌려 놓습니다. 이 과정에서 undo 복구를 진행했던 과정을 redo 복구를 위해서 따로 CLR(Compensation Log Record) 로그에 저장하는데 그 이유는 undo 복구를 수행하다가 잘못된 연산을 했을때 원래의 상태로 돌려 놓기 위함 입니다. 이런 식으로 로그 레코드를 역방향으로 탐색하면서 undo 복구를 반복하다보면 해당 트랜잭션의 시작 로그 레코드로 도달하게 되고 트랜잭션 복구는 완료 됩니다.




장애로인한 재시작 복구


 장애로인해서 재시작 복구를 할 경우에는 3 단계로 진행이 됩니다. 먼저, 로그를 분석 합니다. 마지막 체크 포인트부터 최근 로그(End of Log)까지 탐색해서 어디부터 어디까지 복구할 것인지를 결정합니다. 그리고 두번째 단계에서는 복구 시작 시점부터 장애 발생 시점까지 redo 복구를 통해서 데이터베이스의 상태를 장애 발생 시점과 동일하게 만들어 놓습니다. 이 과정에서 redo 복구는 실패한 트랜잭션의 redo 로그에 대해서도 redo 복구를 수행 합니다. 마지막 단계에서는 undo 복구가 필요한 부분에대한 undo 복구가 진행 됩니다. undo 복구는 위의 트랜잭션 복구와 같은 방식으로 undo 복구를 진행 합니다. 그러나 하나의 트랜잭션만 복구 작업을 진행하는 것이 아니고 모든 트랜잭션을 복구하는 것이기 때문에 하나의 트랜잭션 복구하는 것과 구별하기 위해서 Global Undo 라고 부릅니다.




참고



'Computer Engineering > Database' 카테고리의 다른 글

[DB] 정규화  (0) 2017.08.14
[DB] 트랜잭션 : Log  (0) 2017.08.14
[DB] 트랜잭션 : undo, redo  (0) 2017.08.13
[DB] 트랜잭션(Transaction)  (0) 2017.08.11
Comments