트랜잭션 장애: 트랜잭션 내의 논리적 오류나 잘못된 입력 데이터, 또는 시스템 내의 자원 부족으로 인한 트랜잭션 중단 (DBMS)
시스템 장애: 정전이나 하드웨어 결함으로 시스템 작동이 중단 (DBMS)
미디어 장애: 디스크와 같은 저장장치의 일부 또는 전체가 손상 (OS)
<대처방안>
백업 파일: DVD나 자기 테이프와 같은 저장장치를 이용
Mirroring: 하나의 데이터베이스를 서로 다른 디스크에 복제 <RAID 기법>
복구
데이터베이스를 장애 발생 이전의 일관된 상태로 복원
복구의 기본 원리는 데이터 중복
로그를 확인하여 트랜잭션이 완료되었다면 <T commit>로그가 있다면 수행 실패하였다면 <T commit>로그가 없다면 롤백
UNDO: 변경되기 전 값을 가지고 복구
REDO: 변경된 값을 가지고 복구 (재실행 연산)
로그가 존재하지 않는다면 백업이 불가능
로그
트랜잭션이나 시스템 장애에 대비한 데이터베이스 갱신 이력을 저장 한 것 로그는 OS가 갱신한 데이터 항목을 기록하기 전에 로그 레코드에 먼저 기록 되어야 함
구성 요소
트랜잭션의 시작 <T start>
트랜잭션의 완료 <T commit>
데이터 항목에 대한 갱신
지연 갱신 기법: <T,x, v(갱신 값)>
즉시 갱신 기법: <T, x, v1(갱신 전 값), v2(갱신 후 값)>
갱신 방법
지연 갱신: 트랜잭션의 수행이 성공적으로 끝난 후에 갱신 내용을 디스크에 반영 하는 것 완료 전에는 주기억 장치의 버퍼에만 기록을 저장 따라서 데이터 베이스값이 무엇인지 확실히 알 수 없음 (UNDO 연산 불필요, REDO 연산 필요) -> NO-UNDO/REDO 알고리즘
트랜잭션 T가 시작되면 로그에 <T start>를 기록
T가 데이터 항목 x에 쓰기 연산을 수행하면 로그에 기록하고 메모리 버퍼에 변경된 x 저장
최종적으로 T가 모든 연산에 대한 실행을 마치면 T는 부분 완료 상태가 되고 로그에 <T commit>을 기록
<T commit>이 로그에 기록되면 T는 완료 상태가 되어 종료
이후 적정한 시기에 버퍼에 저장된 x를 디스크에 저장
<복구 방법>
로그 파일의 처음부터 기록을 순차적으로 검색
로그에 저장된 트랜잭션 T의 로그 레코드에서 <T commit>이 저장되었으면 갱신 기록에 대해 REDO 수행
<T commit>이 없는 나머지 트랜잭션에 대한 로그 레코드는 무시
즉시 갱신: 트랜잭션의 수행시 버퍼에 내용을 쓰자마자 OS에게 요청하여 데이터베이스 디스크에 작성하는 것지연 갱신 기법에서는 트랜잭션이 실패하면 절대 변경된 데이터가 데이터 베이스에 반영이 되지 않기 때문에 UNDO연산이 필요하지 않지만 즉시 갱신 기법은 트랜잭션이 실패하더라도 중간에 write연산이 껴 있다면 결과가 반영이 될 수 있기 때문에 UNDO/REDO 알고리즘이 사용된다.
<복구 방법>
로그 파일이 기록된 마지막부터 반대방향으로 순차적으로 검색
로그에 저장된 각 트랜잭션 T의 로그 레코드에 대해서 <T start>가 있으나 <T commit>이 없으면 UNDO 연산 수행
로그 파일에 처음 혹은 검사점에 도달했으면 반대방향으로 순차적으로 검색
로그에 저장된 각 트랜잭션의 로그에 대해 <T commit>이 저장되었으면 REDO 연산 수행
검사점을 이용한 복구
로그의 크기가 커질 수록 복구 부담이 증가 하고 그에 따라 불필요한 REDO 연산이 다량 발생하기 때문에 주기적으로 디스크에 강제적으로 쓰는 작업(검사점)을 한다.