회복
- 여러 가지 요인으로 인해 손상된 데이터베이스를 손상되기 이전의 정상적인 상태로 복구시키는 작업을 말한다.
- 회복을 위해 로그(Log)를 이용한다.
로그(Log) : 트랜잭션이 수행되어 변경되는 데이터베이스의 상황 정보를 기록하는 것으로, 트랜잭션이 수행되기 이전 값과 수행된 이후 값 모두 기록된다. 이와 같은 정보를 담고 있는 파일을 로그파일(Log File)이라고 한다.
1) 회복 기법
즉시 갱신 기법 | - 트랜잭션이 실행(활동) 상태에서 변경되는 내용을 바로 데이터베이스에 적용하는 기법. - 변경되는 모든 내용은 로그(Log)에 기록하여 장애 발생 시 로그(Log)의 내용을 토대로 회복시킴. |
지연 갱신 기법 | - 트랜잭션이 수행되어 부분 완료가 될 때까지 데이터베이스에 적용하지 않고 지연시킨 후 부분 완료가 되면 로그(Log)의 내용을 토대로 데이터베이스에 적용하는 기법. |
검사 시점 기법 | - 트랜잭션이 실행되는 중간에 검사 시점(Check Point)을 지정하여 검사 시점까지 수행 후 완료된 내용을 데이터베이스에 적용하는 기법. |
그림자 페이징 (Shadow Paging 기법) |
- 로그(Log)를 사용하지 않고, 데이터베이스를 동일한 크기의 단위인 페이지로 나뉘어 각 페이지마다 복사하여 그림자 페이지를 보관하는 기법. - 데이터베이스의 변경되는 내용은 원본 페이지에만 적용하고, 장애가 발생되는 경우 그림자 페이지를 이용해 회복함. |
2) REDO(재수행)와 UNDO(취소)
REDO | - 트랜잭션이 수행되어 COMMIT이 되면 변경된 내용을 데이터베이스에 반영하게 되는데, 이때 로그(Log)의 내용을 토대로 재수행하며 변경된 내용을 데이터베이스에 반영하게 되는 과정. |
UNDO | - 트랜잭션이 수행되는 도중 오류가 발생하거나 비정상적으로 종료되는 경우 트랜잭션이 시작되는 시점으로 되돌아가는 과정. |
데이터베이스 수행 시 발생되는 장애의 유형
- 트랜잭션 장애 : 하나의 트랜잭션이 수행되는 과정에서 발생하는 오류를 말한다.
- 시스템 장애 : 트랜잭션 장애들로 인해 시스템 상의 문제가 발생하여 트랜잭션이 수행되지 못하는 경우를 말한다. 예를 들어 컴퓨터를 사용하는 도중에 컴퓨터가 다운되는 경우가 여기에 속한다.
- 미디어 장애 : 하드웨어적으로 하드디스크 등이 손상되는 경우를 말한다.
병행 제어(Concurrency Control)
- 동시에 여러 개의 트랜잭션이 실행되는 경우 트랜잭션 간의 격리성을 유지하여 트랜잭션 수행에 문제가 발생되지 않도록 제어하는 것을 병행 제어라고 한다.
- 대표적인 병행 제어의 방법으로 로킹(Locking) 기법이 있다.
1) 로킹(Locking)
- 트랜잭션의 병행 실행 시 하나의 트랜잭션이 사용하는 데이터베이스 내의 데이터를 다른 트랜잭션이 접근하지 못하게 하는 것을 말한다.
- 하나의 트랜잭션이 실행될 때는 LOCK을 설정해 다른 트랜잭션이 데이터에 접근하지 못하도록 잠근 후 실행하고, 실행이 완료되면 UNLOCK을 통해 해제한다(LOCK -> 트랜잭션 실행 -> 트랜잭션 완료 -> UNLOCK).
2) 로킹의 접근 허용
- 한 트랜잭션의 수행시간이 너무 길어 오랜 시간 동안 데이터에 LOCK이 설정된 상태로 지속되면 교착상태(Deadlock)가 발생할 수 있다.
교착상태(Deadlock) : 한 트랜잭션이 완료되지 못해 LOCK상태가 계속 유지되는 경우 다른 트랜잭션들의 작업이 더 이상 진행되지 못하고 무한정 기다리는 상태.
- 따라서 하나의 트랜잭션이 수행하는 동안에도 다른 트랜잭션이 데이터에 접근할 수 있도록 공유 락(Shared Lock)과 배타 락(Exclusive Lock)을 이용한다.
공유 락(Shared Lock) | - 사용 중인 데이터에 대해 읽기만 허용하고, 쓰기는 허용하지 않는 방법. |
배타 락(Exclusive Lock) | - 사용 중인 데이터에 대해 읽기와 쓰기 모두 허용하지 않는 방법. |
3) 로킹 단위
- LOCK을 설정할 데이터의 크기를 나타낸다.
- 로킹 단위는 테이블, 속성, 튜플 단위로 설정할 수 있다.
- 로킹 단위가 크면 많은 양의 데이터의 LOCK 설정이 가능하고, 설정한 가짓수가 적어지며, 병행성 수준이 낮아진다.
로킹 단위를 크게 하여 테이블 자체를 LOCK으로 설정하면 LOCK이 해제되기 전에 다른 트랜잭션은 이 테이블에 접근할 수 없다. 따라서 다른 트랜잭션과 테이블을 이용하는데 병행성 수준이 낮아지게 된다.
- 로킹 단위가 작으면 적은 양의 데이터의 LOCK 설정이 가능하고, 설정한 가짓수가 많아지며, 병행성 수준이 높아진다.
로킹 단위를 작게 하여 현재 LOCK으로 설정되지 않은 부분은 다른 트랜잭션도 접근하여 이용할 수 있으므로 병행성 수준이 높아지게 된다.
4) 2단계 로킹 기법(Two-Phase Locking Protocol)
- 로킹(Locking)의 대표적인 기법으로 LOCK설정 대상 데이터가 여러 개인 경우 모든 데이터에 LOCK을 설정하는 단계와 완료 후 LOCK을 해제하는 단계의 2단계로 구성된 기법이다.
- 교착상태(Deadlock)가 발생할 수 있는 단점이 있다.
확장 단계(Growing Phase) | - 트랜잭션 수행에 필요한 데이터들에 대해 LOCK을 설정하는 단계. |
축소 단계(Shrinking Phase) | - 트랜잭션 수행에 사용되었던 데이터들에 대해 더 이상 필요 없이 설정된 LOCK을 해제하는 단계. |
Table1과 Table2를 이용해 작업을 하는 경우
LOCK 설정 단계 LOCK 해제 단계 LOCK(Table1) LOCK(Table2) 실행 완료 UNLOCK(Table1) UNLOCK(Table2)
5) 타임 스탬프(Time Stamp)
- 각 트랜잭션이 데이터에 접근할 시간을 미리 지정하여 기억시킨뒤 그 시간(Time Stamp)의 순서에 따라 순서대로 데이터에 접근하여 수행하는 방법을 말한다.
- 모든 트랜잭션은 데이터의 접근 시간에 맞춰 수행하므로 교착상태(Deadlock)가 발생하지 않는다.
6) 병행 제어를 하지 않았을 때의 문제점
갱신 분실 (Lost update) |
- 두 개 이상의 트랜잭션이 수행되는 과정에서 연산 결과의 일부가 없어지는 현상. |
모순성 (Inconsistency) |
- 두 개 이상의 트랜잭션이 수행되어 얻어진 결과가 일관성 없이 서로 다른 현상. |
연쇄 복귀 (Cascading Rollback) |
- 두 개 이상의 트랜잭션이 수행되던 중 하나의 트랜잭션이 취소되므로 인해 연쇄적으로 다른 트랜잭션도 취소되는 현상. |
비완료 의존성 (Uncommittes Dependency) |
- 하나의 트랜잭션 수행이 실패한 후 회복되기 이전에 다른 트랜잭션이 실패한 갱신 결과를 참조하는 현상. |
'정보처리산업기사 실기 > 데이터베이스' 카테고리의 다른 글
객체 지향 데이터베이스(OODB) (0) | 2020.11.08 |
---|---|
인덱스(INDEX) (0) | 2020.11.07 |
트랜잭션(Transaction) (0) | 2020.11.07 |
내장 SQL과 커서(Cursor) (0) | 2020.11.07 |
역정규화 (0) | 2020.11.07 |