DB에 문제가 생겨 데이터가 손실되면 조직에 큰 영향을 끼치게 된다. 그래서 DBMS는 중요한 데이터가 손실되지 않도록 원래의 정상 상태로 복구하는 여러 기능을 제공한다. [recovery]
DB에서 같은 데이터를 여러 사용자가 서로 사용하겠다고 욕심부리게 되면 문제가 발생하며 이를 일관된 상태로 유지하기 위한 방법이 필요한데, 이를 병행제어라고 한다.
이렇게 회복과 병행제어를 하기 위한 여러가지 방법에 대해 알아보자.
[트랜잭션]
1. 정의
DBMS가 항상 정확하고 일관된 상태를 유지할 수 있도록 다양한 기능을 제공하는데, 그 중심에는 트랜잭션이 있다. 트랜잭션을 관리함으로 써 DBMS의 회복가 병행제어가 가능해진다.
트랜잭션이란 하나의 작업을 수행하는 데 필요한 DB들의 연산을 모아놓은 것이다. 또한 DB에 장애가 발생했을 때 데이터를 복구하는 작업의 단위도 된다.
이처럼 계좌이체 트랜잭션은 2개의 UPDATE 문으로 구성되어 있으며, 트랜잭션의 처리 순서는 중요하지 않지만, 시스템에 장애가 발생하여 두 번째 UPDATE 문이 발생하지 않으면, 은경이 돈을 받지 못하는 상황이 발생한다.
이런 상황에는 2번째 UPDATE 트랜잭션을 실행하여 모든 트랜잭션을 정상적으로 수행하거나 첫번째 트랜잭션을 취소하여 DB를 트랜잭션 작업 전으로 되돌아가게 해야 한다.
2. 특성
트랜잭션의 특성 4가지 ACID [ 원자성, 일관성, 격리성, 지속성 ]
- 원자성 [atomicity]
트랜잭션을 구성하는 연산들이 모두 정상적으로 실행되거나 하나도 실행되지 않아야 한다는
all - or - nothing 방식을 의미한다. 만약 트랜잭션을 실행하다 장애가 발생하여 작업을 완료하지 못하면 연산을 취소하고 트랜잭션 작업 전의 상태로 되돌려 원자성을 보장해야한다.
- 일관성 [consistency]
트랜잭션이 성공적으로 수행된 후에도 db가 일관된 상태를 유지해야 함을 의미한다.
이와같이 트랜잭션의 수행이 모두 끝났는데 성호와 은경의 잔액 합계가 만원이 되지 않을경우 일관성을 유지하지 못한 경우이다.
- 격리성 [isolation]
트랜잭션이 완료될 때까지 트랜잭션이 생성한 중간 연산 트랜잭션에 다른 트랜잭션들이 접근할 수 없음을 의미한다. DB에는 여러 트랜잭션이 동시에 수행되지만, 각 트랜잭션이 독립적으로 수행될 수 있도록 중간 연산 결과에 서로 접근하지 못하게 한다.
이처럼 은경계좌에 5000원을 넣는 트랜잭션을 수행 중, 두 번째 트랜잭션이 실행되기 전 DB는 일시적으로 일관되지 못한 상태가 된다. 이때 새로운 계좌입금 트랜잭션으로 1000원을 입금하게되면 은경의 계좌 잔액기 각각 1000원, 5000원이 되므로 모순된 데이터를 생성한다.
- 지속성 = 영속성 [durability]
트랜잭션이 성공적으로 완료된 후 DB에 반영한 수행 결과는 어떠한 경우데도 손실되지 않고 영구적이어야 함을 의미한다.
3. 연산
트랜잭션의 수행과 관련하여 작업 완료를 의미하는 commit 연산과 작업 취소를 의미하는 rollback 연산이 있다.
- commit 연산 : 트랜잭션이 성공적으로 수행되었음을 선언 [작업완료]
- rollback 연산 : 트랜잭션 수행하는데 실패했음을 선언 [작업취소]
rollback 연산이 실행되면 트랜잭션이 지금까지 실행한 연산의 결과가 취소되고 트랜잭션이 수행되기 전의 상태로 돌아간다.
4. 상태
- 활동 상태
트랜잭션이 수행되기 시작하여 혀재 수행중인 상태 - 부분완료 상태
트랜잭션의 마지막 연산이 실행된 지구의 상태. 아직 최종 결과를 DB에 반영하지 않은 상태 - 완료 상태
트랜잭션이 성공적으로 완료되오 commit 연산을 실행한 상태. DB에 최종 결과를 반영 - 실패 상태
트랜잭션의 내부오류 등 여러 문제로 인해 장애가 발생하여 트랜잭션의 수행이 중단된 상태 - 철회 상태
트랜잭션을 수행하는 데 실패하여 rollback 연산을 실행한 상태. 철회 상태가 되면 지금까지 실행한 트랜잭션의 연산을 모두 취소하고 트랜잭션이 수행되기 전의 DB 상태로 되돌리면서 트랜잭션이 종료된다.
[ 장애와 회복 ]
회복은 장애가 발생했을 때 DB를 장애가 발생하기 전의 일관된 상태로 복구시키는 것이다.
1. 유형
트랜잭션 장애 |
의미 | 트랜잭션 수행 중 요루가 발생하여 정상적으로 수행을 할 수 없는 상태 |
원인 | 트랜잭션의 논리적 오류. 잘못된 데이터 입력, 처리 대상 데이터의 부재 등 | |
시스템 장애 |
의미 | 하드웨어의 결함으로 정상적으로 수행을 계속할 수 없는 상태 |
원인 | 하드웨어 이상으로 메인 메모리에 저장된 정보가 손실되거나 교착 상태가 발생한 경우 등 | |
미디어 장애 [H/W] |
의미 | 디스크 장치의 결함으로 디스크에 저장된 DB의 일부 혹은 전체가 손상된 상태 |
원인 | 디스크 헤드의 손상이나 고장 등 |
2. 회복 기법
redo (재실행) |
가장 최근에 저장한 DB 복사본을 가져온 후 로그를 이용해 복사본이 만들어진 이후에 실행된 모든 변경 연산을 재실행하여 장애가 발생하기 직전의 데이터베이스 상태로 복구 [트랜잭션이 완료된 후 장애가 발생한 경우] |
undo (취소) |
로그를 이용해 지금까지 실행된 모든 변경 연산을 취소하고 DB를 원래의 상태로 복구 [트랜잭션이 완료되기 전 장애가 발생한 경우] |
로그는 데이터베이스에 대한 변경 연산과 관련하여, 데이터르 변경하기 이전의 값과 변경한 이후의 값을 기록한 것이다.
<Ti, start> | 의미 | 트랜잭션 Ti가 수행을 시작했다 |
예 | <Ti, start> | |
<Ti, X, old_value, new_value> | 의미 | 트랜잭션 Ti가 데이터 X를 이전 값 old_value 에서 새로운 값 new_value로 변경하는연삭을 실행했음을 기록 |
예 | <Ti, X, 10000, 50000> | |
<Ti, commit> | 의미 | 트랜잭션 Ti가 성공적으로 완료되었음을 기록 |
예 | <Ti, commit> | |
<Ti, abort> | 의미 | 트랜잭션 Ti가 철회되었음을 기록 |
예 | <Ti, abort> |
[ 병행제어 ]
병행수행 : 여러 개의 트랜잭션을 동시에 수행하는 것으로, 갱신 분실, 모순성, 연쇄 복귀의 문제가 있다.
병행제어 : 병행 수행 시 문제가 발생하지 않고 정확한 결과를 얻을 수 있도록 트랜잭션의 수행을 제어하ㅡㄴ 것이다.
1. 갱신 분실
2. 모순성
3. 연쇄 복귀
가장 중요한건 트랜잭션 작업중 사이에 다른 트랜잭션이 끼어들지만 않으면 된다.
'전공수업 > 데이터베이스 [DB]' 카테고리의 다른 글
케라스와 신경망 (0) | 2019.11.29 |
---|---|
제 9장 ] 정규화 (0) | 2019.11.11 |
제 8장] DB 설계 (0) | 2019.11.10 |
제 7장 ] DB언어 SQL (0) | 2019.10.19 |
ORACLE 오류 ] ORA - 12505 (0) | 2019.10.17 |