데이터베이스 회복

Bam·2025년 5월 12일
0

Database

목록 보기
36/39
post-thumbnail

회복

데이터베이스에서 발생할 수 있는 장애의 유형은 다음과 같은 종류들이 있습니다.

  • 시스템 충돌
    소프트웨어 정보나 데이터가 저장된 주기억장치가 손실되는 경우.
  • 미디어 장애
    데이터가 저장된 보조기억장치가 손실되는 경우.
  • 응용 소프트웨어 오류
    데이터베이스에 접근하는 소프트웨어의 오류로 트랜잭션 수행이 실패하는 경우
  • 자연재해
    화재나 지진, 홍수 등으로 인한 자연재해로 인해 시스템이 손상되는 경우
  • 부주의
    시스템 운영자나 사용자의 부주의로 인해 데이터가 손실되거나 훼손되는 경우

위와 같은 장애들이 발생했을 때 데이터 일관성, 무결성을 보장하기 위해 원래 상태로 돌리는 기능을 회복 Recovery라고 합니다.

자연재해나 부주의 같은 경우는 데이터베이스 저장 장소, 장치의 이중화를 통해 해결하고 시스템 충돌, 미디어 장애, 응용 소프트웨어 오류의 장애 대해서 회복을 수행합니다.

회복로그 기반 회복, 체크포인트 회복 두 가지 방식 중에 하나를 택하여 수행하게 됩니다.


로그 기반 회복

트랜잭션 수행 시 모든 변경사항은 버퍼에 쓰인다음 로그 Log에 먼저 기록해둔 다음 로그에 기록이 완료되면 변경을 실제 저장 공간에 덮어 씌우는 방식을 이용합니다.

트랜잭션은 시작 > 수행 > 부분완료 > 완료의 과정을 거치면서 실행이 됩니다.
트랜잭션이 수행되다가 COMMIT 명령이 실행되면 부분완료 상태가 됩니다. 부분완료 상태에서는 변경된 버퍼의 내용이 로그에 기록되고 그 후에 실제 디스크에 기록이 완료되면 완료상태가 됩니다.

로그 파일에는 트랜잭션 정보, 로그 타입, 데이터 항목명, 수정 전 값, 수정 후 값 등의 데이터가 작성되어 있습니다.

장애가 발생한 후 시스템이 재가동되면 DBMS는 로그 파일을 가장 먼저 확인하게 됩니다. 로그 파일을 확인해서 종료된 트랜잭션에 대해서는 종료 확정을 위해 재실행(REDO)를 수행하고, 도중에 중단된 트랜잭션은 변경을 없던 일로 되돌리기 위해 취소(UNDO)를 수행합니다.

이 과정에서 로그 파일에 기록된 수정 전 값, 수정 후 값 중 상황에 맞는 값을 선택하여 데이터를 회복하게 됩니다.

트랜잭션 재실행 REDO

로그 파일에 트랜잭션의 STARTCOMMIT이 존재하는 경우 트랜잭션 재실행 REDO을 수행합니다. COMMIT 연산의 존재가 트랜잭션 작업이 (부분)완료 되었다는 뜻이기 때문입니다.

하지만 장애로인해 수행됐던 트랜잭션의 버퍼 값이 데이터베이스에 반영이 되지 않았을 수도 있으므로 로그 파일에서 수정 후 값을 데이터베이스에 다시 기록하게 됩니다.

트랜잭션 취소 UNDO

로그 파일에 트랜잭션 START만 있는 경우 트랜잭션이 도중에 중단되었으므로 트랜잭션 취소 UNDO를 수행합니다.

도중에 중단된 트랜잭션의 변경사항은 모두 취소되어야 하기 때문에 로그 파일의 수정 전 값을 통해 데이터를 원상 복구 시키게됩니다.


체크포인트 회복

회복 과정에서 로그 탐색 범위를 좁혀서 회복 속도를 올리기 위해 체크포인트를 사용합니다. 체크포인트는 몇 십 분 단위로 데이터베이스와 트랜잭션 로그 파일을 동기화시키고 동시화 시점을 로그 파일에 기록하는 것을 의미합니다.

어떤 체크포인트 지점 이후에 장애가 발생했다면 다음과 같이 처리합니다.

  • 체크포인트 이전에 COMMIT된 트랜잭션은 회복을 건너뛴다.
    체크포인트 지점에서 버퍼와 데이터베이스가 동기화 기록 되었으므로 따로 회복할 필요가 없음

  • 체크포인트 이후 COMMIT되었거나 COMMIT이 없는 경우 회복을 진행한다.
    REDO, UNDO 상황에 맞춰서 각 회복을 진행

0개의 댓글