Transaction(트랜잭션)
1. 개념
트랜잭션은 데이터베이스 시스템에서 하나의 논리적 기능을 정상적으로 수행하기 위한 작업의 기본 단위이다.
<상태>
- 활동상태(Active) : 초기상태, 트랜잭션이 실행 중일 때 가지는 상태
- 부분완료상태(Partially Committed) : 마지막 명령문이 실행된 후에 가지는 상태
- 완료상태(Committed) : 트랜잭션이 성공적으로 완료된 후 가지는 상태, 부분완료상태에서 COMMIT하면 된다.
- 실패상태(Failed) : 정상적인 실행이 더이상 진행될 수 없을 때 가지는 상태
- 철회상태(Aborted) : 데이터베이스가 트랜잭션 시작 전 상태로 환원된 상태, 실패상태에서 ROLLBACK 사용
2. 특징
- Atomicity : 분해가 불가능한 작업의 최소단위, 연산 전체가 성공 또는 실패, 하나라도 실패할 경우 전체 취소
- Consistency : 데이터베이스가 일관되게 있어야 한다.
- Isolation : 트랜잭션 실행 중 생성하는 연산의 중간결과를 다른 트랜잭션이 접근 불가
- Durability : 성공이 완료된 트랜잭션의 결과는 영속적으로 데이터베이스에 저장
3. 연산
(1) 트랜잭션 연산(원자성 주요기법)
- COMMIT과 ROLLBACK 명령어에 의해 원자성을 보장받는다.
(2) 병행 제어(일관성 주요기법)
- 다수 사용자 환경에서 여러 트랜잭션 수행할 때, 데이터베이스 일관성 유지를 위해 상호작용을 제어
<병행 제어 목적>
- 데이터베이스 공유 최대화, 시스템 활용도 최대화, 데이터베이스 일관성 유지, 사용자에 대한 응답시간 최소화
<병행 제어 미보장시 문제점>
- 갱신 손실 : 먼저 실행된 트랜잭션의 결과를 나중에 실행된 트랜잭션이 덮어쓸 때 발생하는 오류
- 현황 파악오류 : 트랜잭션의 중간수행결과를 다른 트랜잭션이 참조하여 발생하는 오류
- 모순성 : 두 트랜잭션이 동시에 실행되어 데이터베이스의 일관성이 결여되는 오류
- 연쇄복귀 : 복수의 트랜잭션이 데이터 공유시 특정 트랜잭션이 처리를 취소할 경우 트랜잭션이 처리한 곳의 부분을 취소하지 못하는 오류
<병행 제어 기법>
- 로킹(Locking) : 같은 자원을 엑세스하는 다중 트랜잭션 환경에서 트랜잭션의 순차적 진행을 보장하는 직렬화 기법, 데이터베이스, 파일, 레코드 등은 로킹 단위가 될 수 있다. 로킹 단위 작아지면 데이터베이스 공유도 증가, 로킹 단위 작아지면 로킹 오버헤드 증가, 한꺼번에 로킹할 수 있는 객체 크기를 로킹 단위라 한다.
- 낙관적 검증 : 트랜잭션이 검증을 수행하지 않고 일단 수행하고, 종료시 검증을 수행하여 데이터베이스에 반영
- 타임 스탬프 순서(Time Stamp Ordering) : 트랜잭션 실행 전에 타임스탬프를 부여하여 부여된 시간에 따라 작업 수행, 트랜잭션 간의 순서를 미리 정하는 기법
- 다중버전 동시성 제어(MVCC) : 타임스탬프 비교하여 직렬가능성 보장되는 적절한 버전을 선택하여 접근
(3) 데이터베이스 고립화 수준(격리성 주요기법)
- Isolation Level : 다른 트랜잭션이 현재 데이터에 대한 무결성을 해치지 않기 위해 잠금을 설정하는 정도
- Read Uncommitted : 한 트랜잭션에서 연산중인 데이터를 다른 트랜잭션이 읽는 것을 허용
- Read Committed : 한 트랜잭션에서 연산 수행중인 데이터에 대한 읽기를 제한, 연산 완료되면 읽기 허용
- Repeatable Read : 선행 트랜잭션이 특정 데이터를 읽을 때, 트랜잭션 종료시까지 해당 데이터에 대한 갱신, 삭제 제한
- Serializable Read : 선행 트랜잭션이 특정 데이터 영역을 순차적으로 읽을 때, 해당 데이터 영역 전체에 대한 접근 제한
(4) 회복기법(영속성 주요기법)
- Recovey 기법 : 트랜잭션을 수행하는 도중 장애로 인해 손상된 데이터베이스를 손상 이전의 정상적인 상태로 복구
- 로그기반회복기법 - 지연갱신회복기법 : 트랜잭션이 완료되기 전까지 데이터베이스에 기록하지 않는 기법
- 로그기반회복기법 - 즉각갱신회복기법 : 트랜잭션 수행 중 갱신결과를 바로 데이터베이스에 반영하는 기법
- 체크포인트회복기법 : 장애발생시 검사점 이후 처리된 트랜잭션에 대해서만 장애발생 이전으로 복원하는 기법
- 그림자페이징회복기법 : 데이터베이스 트랜잭션 수행시 복제본을 생성하여 장애시 이를 이용하여 복구하는 기법
4. TCL
- TCL(Transaction Control Language) : 트랜잭션 결과를 허용하거나 취소하는 목적으로 사용하는 언어
- COMMIT : 트랜잭션 확정, 트랜잭션을 메모리에 영구적으로 저장
- ROLLBACK : 트랜잭션 취소, 트랜잭션 내역을 저장 무효화시킴
- SAVEPOINT(CHECKPOINT) : 저장시기 설정, ROLLBACK을 위한 시점 지정