ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 트랜잭션 - 회복
    데이터베이스 2021. 8. 11. 15:07
    💡
    회복은 데이터베이스에 장애가 발생했을 때 데이터베이스를 일관성 있는 상태로 되돌리는 DBMS의 기능입니다.

    1️⃣ 트랜잭션과 회복

    트랜잭션은 데이터베이스 회복의 단위입니다. 트랜잭션은 데이터의 변경 내용을 한순간에 모두 데이터베이스에 기록하지 않고, 일단 변경한 내용을 로그에 기록한 후 데이터베이스에 반영합니다. DBMS의 회복 관리자는 트랜잭션의 ACID 성질 중 원자성과 지속성을 보장하여 장애로부터 데이터베이스를 보호합니다

    트랜잭션 수행 과정

    1. 트랜잭션이 시작하면 수행 상태가 됩니다
    1. 정상적으로 수행되면 COMMIT문을 만나 부분 완료됩니다
    1. 부분 완료 후 버퍼의 내용을 데이터 베이스에 기록하면 트랜잭션이 최종 완료됩니다.
    1. 만약 수행 중 문제가 생겨 완료 전에 실패하면 취소 과정을 거쳐 이제까지 진행한 작업을 거꾸로 되돌립니다. 변경된 데이터 중 혹시 데이터베이스에 이미 기록된 데이터가 있다면 로그를 이용하여 되돌립니다
    1. 부분 완료를 했으나 실패가 일어난 경우, 취소 과정을 거쳐 이제까지 진행한 작업을 거꾸로 되돌립니다.


    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로 배우는 데이터베이스 개론과 실습, 한빛 아카데미

    '데이터베이스' 카테고리의 다른 글

    인덱싱이란  (0) 2021.08.12
    트랜잭션 - 고립 수준  (0) 2021.08.11
    트랜잭션 - 동시성 제어  (0) 2021.08.10
    트랜잭션 - 개념  (0) 2021.08.10

    댓글

Designed by Tistory.