분산 DBMS-실패 및 커밋

데이터베이스 관리 시스템은 여러 가지 오류에 취약합니다. 이 장에서는 실패 유형과 커밋 프로토콜을 연구합니다. 분산 데이터베이스 시스템에서 장애는 소프트 장애, 하드 장애 및 네트워크 장애로 크게 분류 될 수 있습니다.

소프트 실패

소프트 오류는 영구 저장소가 아닌 컴퓨터의 휘발성 메모리 손실을 일으키는 오류 유형입니다. 여기에서 주 메모리, 버퍼, 캐시 또는 레지스터와 같은 비 영구 스토리지에 저장된 정보는 손실됩니다. 시스템 충돌이라고도합니다. 다양한 유형의 소프트 실패는 다음과 같습니다.

  • 운영 체제 오류입니다.
  • 메인 메모리 충돌.
  • 거래 실패 또는 낙태.
  • 정수 오버플로 또는 0으로 나누기 오류와 같은 시스템 생성 오류.
  • 지원 소프트웨어 실패.
  • 정전.

하드 실패

하드 장애는 디스크와 같은 영구 또는 비 휘발성 스토리지의 데이터 손실을 유발하는 장애 유형입니다. 디스크 장애는 일부 디스크 블록의 데이터 손상 또는 전체 디스크 장애를 일으킬 수 있습니다. 하드 실패의 원인은 다음과 같습니다.

  • 정전.
  • 미디어에 결함이 있습니다.
  • 읽기-쓰기 오작동.
  • 디스크의 정보 손상.
  • 디스크의 읽기 / 쓰기 헤드 충돌.

새로 포맷 된 즉시 사용할 수있는 디스크가 예약되어 있으면 디스크 오류 복구가 짧을 수 있습니다. 그렇지 않은 경우 기간에는 구매 주문서를 받고 디스크를 구입하고 준비하는 데 걸리는 시간이 포함됩니다.

네트워크 장애

네트워크 장애는 분산 또는 네트워크 데이터베이스에서 만연합니다. 이는 데이터의 분산 특성과 네트워크를 통한 데이터 전송으로 인해 데이터베이스 시스템에서 발생하는 오류로 구성됩니다. 네트워크 장애의 원인은 다음과 같습니다.

  • 통신 링크 실패.
  • 네트워크 정체.
  • 전송 중 정보 손상.
  • 사이트 실패.
  • 네트워크 파티셔닝.

커밋 프로토콜

모든 데이터베이스 시스템은 실패 후에도 트랜잭션의 바람직한 속성이 유지되도록 보장해야합니다. 트랜잭션 실행 중에 오류가 발생하면 트랜잭션에 의해 발생한 모든 변경 사항이 커밋되지 않을 수 있습니다. 이로 인해 데이터베이스가 일관성이 없습니다. 커밋 프로토콜은 트랜잭션 실행 취소 (롤백) 또는 트랜잭션 다시 실행 (롤 포워드)을 사용하여이 시나리오를 방지합니다.

커밋 포인트

트랜잭션 커밋 또는 중단 여부를 결정하는 시점을 커밋 지점이라고합니다. 다음은 커밋 지점의 속성입니다.

  • 데이터베이스가 일관된 시점입니다.

  • 이 시점에서 데이터베이스가 가져온 수정 사항은 다른 트랜잭션에서 볼 수 있습니다. 모든 트랜잭션은 일관된 데이터베이스보기를 가질 수 있습니다.

  • 이 시점에서 모든 트랜잭션 작업이 성공적으로 실행되었으며 그 결과가 트랜잭션 로그에 기록되었습니다.

  • 이 시점에서 필요한 경우 트랜잭션을 안전하게 취소 할 수 있습니다.

  • 이 시점에서 트랜잭션은 보유한 모든 잠금을 해제합니다.

트랜잭션 실행 취소

트랜잭션에 의해 데이터베이스에 적용된 모든 변경 사항을 실행 취소하는 프로세스를 트랜잭션 실행 취소 또는 트랜잭션 롤백이라고합니다. 이것은 주로 소프트 실패의 경우에 적용됩니다.

거래 재실행

트랜잭션에 의해 데이터베이스에 적용된 변경 사항을 다시 적용하는 프로세스를 트랜잭션 다시 실행 또는 트랜잭션 롤 포워드라고합니다. 이는 대부분 하드 장애 복구에 적용됩니다.

트랜잭션 로그

트랜잭션 로그는 데이터베이스 항목에 대한 트랜잭션 작업을 추적하는 순차 파일입니다. 로그는 본질적으로 순차적이기 때문에 처음부터 끝까지 순차적으로 처리됩니다.

트랜잭션 로그의 목적-

  • 트랜잭션을 커밋하거나 지원하는 커밋 프로토콜을 지원합니다.
  • 실패 후 데이터베이스 복구를 지원합니다.

트랜잭션 로그는 일반적으로 디스크에 보관되므로 소프트 오류의 영향을받지 않습니다. 또한 로그는 디스크 장애로부터 보호하기 위해 자기 테이프와 같은 보관 저장소에 주기적으로 백업됩니다.

트랜잭션 로그의 목록

트랜잭션 로그는 트랜잭션 상태에 따라 5 가지 유형의 목록을 유지합니다. 이 목록은 복구 관리자가 트랜잭션 상태를 확인하는 데 도움이됩니다. 상태 및 해당 목록은 다음과 같습니다.

  • 트랜잭션 시작 레코드와 트랜잭션 커밋 레코드가있는 트랜잭션은 커밋 목록에서 유지 관리되는 커밋 된 트랜잭션입니다.

  • 트랜잭션 시작 레코드와 트랜잭션 실패 레코드가 있지만 트랜잭션 중단 레코드가없는 트랜잭션은 실패한 트랜잭션이며 실패 목록에 유지됩니다.

  • 트랜잭션 시작 레코드와 트랜잭션 중단 레코드가있는 트랜잭션은 중단 목록에 유지되는 중단 된 트랜잭션입니다.

  • 트랜잭션 시작 레코드와 트랜잭션 커밋 전 레코드가있는 트랜잭션은 커밋 전 트랜잭션, 즉 모든 작업이 실행되었지만 커밋되지 않은 트랜잭션이며 커밋 전 목록에 유지됩니다.

  • 트랜잭션 시작 레코드가 있지만 커밋 전, 커밋, 중단 또는 실패에 대한 레코드가없는 트랜잭션은 활성 트랜잭션이며 활성 목록에서 유지됩니다.

즉시 업데이트 및 지연 업데이트

즉시 업데이트 및 지연 업데이트는 트랜잭션 로그를 유지 관리하는 두 가지 방법입니다.

immediate update모드에서는 트랜잭션이 실행될 때 트랜잭션에 의해 수행 된 업데이트가 디스크에 직접 기록됩니다. 이전 값과 업데이트 값은 디스크의 데이터베이스에 쓰기 전에 로그에 기록됩니다. 커밋시 디스크에 대한 변경 사항이 영구적으로 적용됩니다. 롤백시 데이터베이스의 트랜잭션에 의해 변경된 내용은 삭제되고 이전 값은 로그에 저장된 이전 값에서 데이터베이스로 복원됩니다.

deferred update모드에서는 트랜잭션이 실행될 때 트랜잭션에 의한 데이터베이스 업데이트가 로그 파일에 기록됩니다. 커밋시 로그의 변경 사항이 디스크에 기록됩니다. 롤백시 로그의 변경 사항이 삭제되고 데이터베이스에 변경 사항이 적용되지 않습니다.