- 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다.
- 데이터베이스 시스템에서 복구 및 병행 수행 시 처리되는 작업의 논리적 단위이다.
- 하나의 트랜잭션은 Commit 되거나 Rollback 된다.
- 트랜잭션은 일반적으로 회복의 단위가 된다.
40. 트랜잭션의 특성
1. 원자성(Atomicity)
- 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 함
- 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 에러가 발생하면 트랜잭션 전부가 취소되어야 함
2. 일관성(Consistency)
- 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환함
- 시스템이 가지고 있는 고정 요소는 트랜잭션 수행전과 트랜잭션 수행 완료 후의 상태가 같아야 함
3. 독립성, 격리성(Isolation)
- 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 끼어들 수 없음
- 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없음
4. 영속성, 지속성(Durability)
- 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 함
41. Commit, Rollback 연산
1. Commit 연산
: 하나의 논리적 단위(트랜잭션)에 대한 작업이 성공적으로 끝났고, 데이터베이스가 다시 일관된 상태에 있을 때 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산
2. Rollback 연산
: 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 이 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소(Undo)시키는 연산으로, 해당 트랜잭션을 재시작하거나 폐기함.
42. 트랜잭션의 상태
Active(활동) : 트랜잭션이 샐행중에 있는 상태
Failed(장애) : 트랜잭션 실행에 오류가 발생하여 중단된 상태
Aborted(철회) : 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태
Partially Committed(부분 완료) : 트랜잭션의 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태
Committed(완료) : 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태
43. 회복(Recovery)
- 회복은 트랜잭션들의 처리를 수행하는 도중 장애가 발생하여 데이터베이스가 손상되었을 때 손상되기 이전의 정상 상태로 복구시키는 작업이다.
- 장애의 유형
1) 트랜잭션 장애 : 입력 데이터 오류, 불명확한 데이터, 시스템 자원 요구의 과다 등 트랜잭션 내부의 비정상적인 상황으로 인하여 프로그램 실행이 중지되는 현상
2) 시스템 장애 : 데이터베이스에 손상을 입히지는 않으나 하드웨어 오동작, 소프트웨어의 손상, 교착 상태 등에 의해 모든 트랜잭션의 연속적인 수행에 장애를 주는 현상
3) 미디어 장애 : 저장장치인 디스크 블록의 손상이나 디스크 헤드의 충돌 등에 의해 데이터베이스의 일부 또는 전부가 물리적으로 손상된 상태
- 회복 관리기(Recovery Management)
- DBMS의 구성 요소이다.
- 트랜잭션 실행이 성공적으로 완료되지 못하면 트랜잭션이 데이터베이스에 만들었던 모든 변화를 취소(Undo)시키고 트랜잭션 수행 이전의 원래 상태로 복구하는 역할을 담당한다.
- 메모리 덤프, 로그(Log)를 이용하여 수행한다.
- 회복 기법의 종류
- 연기 갱신 비법(Deferred Update)
- 즉각 갱신 기법(Immediate Update)
- 그림자 페이지 대체 기법(Shadow Paging)
- 검사점 기법(Check Point)
44. 병행 제어(Concurrency Control)
- 다중 프로그램의 이점을 활용하여 동시에 여러 개의 트랜잭션을 병행 수행시킬 때, 동시에 실행되는 트랜잭션들이 데이터베이스의 일관성을 파괴하지 않도록 트랜잭션 간의 상호작용을 제어하는 것이다.
병행 수행의 문제점
- 갱신 분실(Lost Update) : 2개 이상의 트랜잭션이 같은 자료를 공유하여 갱신할 때 갱신 결과의 일부가 없어지는 현상
- 비완료 의존성(Uncommitted Dependency) : 하나의 트랜잭션 수행이 실패한 후 회복되기 전에 다른 트랜잭션이 실패한 갱신 결과를 참조하는 현상
- 모순성(Inconsistency) : 두 개의 트랜잭션이 병행 수행될 때 원치 않는 자료를 이용함으로써 발행하는 문제
- 연쇄 복귀(Cascading Rollback) : 병행 수행되던 트랜잭션들 중 어느 하나에 문제가 생겨 Rollback하는 경우 다른 트랜잭션도 함께 Rollback 되는 현상
병행 제어의 목적
- 데이터베이스의 공유를 최대화한다.
- 시스템의 활용도를 최대화한다.
- 데이터베이스의 일관성을 유지한다.
- 사용자에 대한 응답 시간을 최소화한다.
로킹(Locking)
- 로킹은 주요 데이터의 액세스를 상호 배타적으로 하는 것이다.
- 트랜잭션들이 어떤 로킹 단위를 액세스하기 전에 Lock(잠금)을 요청해서 Lock이 허락되어야만 그 로킹 단위를 액세스할 수 있도록 하는 기법이다.
로킹 단위(Locking Granularity)
- 병행 제어에서 한꺼번에 로킹할 수 있는 데이터 단위이다.
- 데이터베이스, 파일, 레코드, 필드 등은 로킹 단위가 될 수 있다.
- 로킹 단위가 크면 로크 수가 작아 관리하기 쉽지만 병행성 수준이 낮아지고, 로킹 단위가 작으면 로크 수가 많아 관리하기 복잡하지만 병행성 수준이 높아진다.
병행 제어 종류
1. 로킹기법
2. 최적병행수행(검증기법, 확인 기법, 낙관적 기법)
3. 타임스탬프 기법
4. 다중 버전기법
'전공공부 > 데이터베이스' 카테고리의 다른 글
51. 스택의 삽입(Push)과 삭제(Pop) (0) | 2020.02.12 |
---|---|
50. 스택(Stack) (0) | 2020.02.12 |
관계해석 (0) | 2020.02.02 |
27.관계대수의 개요 / 28.순수 관계 연산자 (0) | 2020.02.02 |
키(Key)의 개념 및 종류 (0) | 2020.02.02 |
댓글