데이터베이스의 논리적 작업단위, 트랜잭션(Transaction)
- 정보처리기술사/데이터베이스
- 2020. 11. 28.
트랜잭션(Transaction)의 개요
트랜잭션의 개념
- 한번에 수행되어야 할 데이터베이스의 일련의 Read, Write 연산을 수행하는 단위
- 하나의 논리적 기능을 수행하기 위한 데이터베이스 처리작업의 단위
- 데이터베이스의 일관된 상태를 다른 일관된 상태로 변화시킴
트랜잭션의 특징(ACID)
원자성(Atomicity)
- 트랜잭션은 분해가 불가능한 최소의 단위로 연산 전체가 처리 되거나 처리 되지 않아야 됨 (All or Nothing)
- Commit/Rollback 연산
일관성(Consistency)
- 일관성 있는 데이터베이스 상태를 보존함
- 트랜잭션 실행이 성공적으로 완료된 상태면, 데이터베이스는 모순이 없이 일관된 데이터 상태를 유지
고립성(Isolation)
- 트랜잭션이 실행 중에 생성하는 연산의 중간 결과를 다른 트랜잭션이 접근할 수 없음
- 고립성으로 인해서 유령 읽기(Phantom Read) 현상 방지
영속성(Durability)
- 성공이 완료된 트랜잭션의 결과는 영구적으로 데이터베이스에 저장
트랜잭션의 상태전이도
상태 | 설명 |
활동(Active) | - 트랜잭션이 시작되고 연산들이 정상적으로 실행중인 상태 |
부분완료(Partially Committed) | - 트랜잭션이 정의된 모든 연산의 실행이 끝난 상태, 즉 Commit 직전 상태 |
실패(Failed) | - 트랜잭션이 실패 한 후 실행되기 이전으로 복귀한 상태 |
철회(Aborted) | - 트랜잭션이 실행에 실패하여 취소되고 트랜잭션 시작 전 상태로 환원된 상태 |
완료(Committed) | - 트랜잭션이 성공적으로 완료된 후, Commit 연산을 수행한 상태 |
트랜잭션의 직렬성
트랜잭션 직렬성 개념
- 트랜잭션의 직렬성이란 여러 트랜잭션이 동시에 병행 처리하여도 트랜잭션을 순차적으로 수행한 결과와 같은 데이터베이스의 일관성을 보장하는 수행 특성
- 트랜잭션 연산들이 인터리빙되어 수행될 때 어떤 스케쥴이 직렬성이 보장할 수 있는지 판단 필요
트랜잭션 직렬성의 필요성
- 다수의 동시사용자 환경에서 서로 다른 트랜잭션이 상호간의 처리결과에 영향을 미치지 않도록 하기 위한 "동시성 제어"가 필요함
트랜잭션의 3가지 연산
철회된 트랜잭션
트랜잭션 재실행(Restart)
- 철회된 트랜잭션을 다시 새로운 트랜잭션으로 취급하여 재시작하는 방법
- 철회된 트랜잭션의 내부적인 논리 오류가 아니라 H/W, S/W 오류인 경우
트랜잭션 폐기(Kill)
- 철회된 트랜잭션을 폐기한다
- 트랜잭션의 철회 원인이 내부적인 논리 오류가 원인인 경우
정상 종료 트랜잭션
커밋 연산(Commit)
- Data 변경 내용을 데이터베이스에 저장하고 새로운 트랜잭션은 commit문 다음 시작 가능
프로그램 정상 종료
- 새로운 트랜잭션은 시작 불가. 변경 내용 저장을 커밋 연산과 동일한 처리
비정상 종료 트랜잭션
롤백 연산(Rollback)
- 해당 트랜잭션을 중지, 폐기하고 데이터베이스 내용을 롤백 수행
- 새로운 트랜잭션은 롤백 다음 시작 가능
키워드
ACID : 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)
'정보처리기술사 > 데이터베이스' 카테고리의 다른 글
엔터티(Entity)를 구분하는 식별자(Identifier) (0) | 2021.01.31 |
---|---|
정규화의 기반이론인 함수적 종속성(Functional Dependency) (0) | 2020.11.28 |
데이터베이스의 연결함정(Connection Trap) (0) | 2020.11.27 |
DB 무결성 확보를 위한, 동시성 제어(Concurrency control) (0) | 2020.10.07 |
DB의 분산처리 기법, 샤드(Shard), 샤딩(Sharding) (0) | 2020.08.14 |