회복
- DB에 장애가 발생했을 때 DB를 일관성 있는 상태로 되돌리는 DBMS의 기능
장애 유형
- 시스템 충돌, 미디어 장애, 응용소프트웨어오류, 자연재해, 부주의
로그 파일
- 트랜 잭션이 수행 중이거나 종료후 발생하는 손실을 방지하기 위해 DB기록을 추적하는 로그파일 사용
- 트랜잭션이 반영한 모든 DB변경사항을 DB에 기록하기전에 미리 기록해두는 별도의 DB로 안전한 하드디스크에 저장되며 기록남음
로그파일 저장된 로그 구조
로그파일 이용 회복
- 장애 발생하여 시스템 재가동시 DBMS는 로그파일을 먼저 살펴본다.
- DBMS는 트랜잭션이 종료되었는지 혹은 중단되었는지 여부를 판단한다.
- 종료된 트랜잭션은 종료를 확정하기 위해 재실행(REDO)를 진행하고, 중단된 트랜잭션은 없던일로 되돌리기 위해 취소(UNDO)를 진행한다.
REDO 트랜잭션 재실행
- 장애발생후 시스템 재가동시 로그파일에 트랜잭션 START가 있고 종료 COMMIT 이 있는경우이다. 트랜잭션이 모두 완료되었다는 의미이지만 변경 내용이 버퍼→DB로 기록되지 않았을 가능성이 높다. 트랜잭션 내용을 다시 DATABASE에 저장하는 과정이 필요하다.
UNDO 트랜잭션 취소
- 장애발생 후 시스템 재가동시 로그파일에 트랜잭션 START만 있고 종료 COMMIT이 없는 경우이다. COMMIT연산이 안보이는것은 트랜잭션이 완료되지 못한것으로, 트랜잭션이 한 일을 모두 취소해야한다. 완료는 못했지만 버퍼의 변경 내용이 DB에 기록되어 있을 가능성이 있기 때문에 로그를 보면서 트랜잭션이 변경한 내용 DB에 원상복구해야한다 UNDO
즉시 갱신 방법
- 갱신데이터 → 로그, 버퍼 → DB 작업이 부분완료 전에 동시에 진행될수 있으며 , 부분완료가 되면 갱신 데이터는 로그에 기록이 끝난 상태
- 쿼리 하나당 바로바로, COMMIT이 없어도 LOG 저장
지연 갱신 방법
- 갱신데이터→ 로그 가 끝난 후 부분완료를 하고 버퍼→데이터베이스 작업이 진행되는 방법
- COMMIT이 있어야만 LOG 저장
커밋시 재수행, 없으면 UNDO
체크 포인트를 이용한 회복
로그 이용 회복은 장애가 일어날 경우 어느시점까지 되돌아가야하는지 알 수 없다.
회복시 많은 시간을 줄이기위해 몇십분 단위로 DB와 로그파일 동기화한 후 동기화 시점을 로그파일에 기록해두는 방법 → 체크포인트(검사점)
체크포인트 작업
- 주기억장치 로그 레코드를 HDD 로그파일로 저장
- 버퍼에 있는 변경 내용을 HDD DB에 저장
- 체크포인트를 로그파일에 표시
체크포인트 이전에 COMMIT 기록이 있는 경우
아무 작업 필요없음, 이미 변경 내용 DB에 모두 기록됨
체크포인트 이후에 COMMIT 기록이 있는 경우
REDO() 수행. 체크포인트 이후 변경 내용이 DB에 반영되지 않았으므로 REDO
체크포인트 이후에 COMMIT 기록이 없는 경우
즉시 갱신 기법을 사용했다면 UNDO. 버퍼의 내용이 반영됐을 수도 있기 때문에 원상복구시켜야함.
지연갱신방법을 사용했다면 아무것도 할 필요없음. COMMIT이전에는 버퍼의 내용을 DB에반영하지 않기 때문
숭실대학교 Database 강의를 수강 후 정리하였습니다.
'Database' 카테고리의 다른 글
[Database] 정규화 과정 (0) | 2023.08.06 |
---|---|
[Database] 동시성 제어 (1) | 2023.02.17 |
[Database] 정규화 (0) | 2023.02.13 |
[Database] 함수 종속성 (0) | 2023.02.12 |
[Database] 이상현상 (0) | 2023.02.11 |