트랜잭션의 특성
- 원자성 : 트랜잭션의 연산 전체가 성공 또는 실패되어야 하는 성질이다.
- 일관성 : 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 하는 성질이다.
- 고립성 : 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않아야 한다는 성질이다.
- 영속성 : 트랜잭션의 결과는 영송적으로 데이터베이스에 저장되어야 하는 성질이다.
트랜잭션의 상태
- 활성(Active)
- 부분 완료(Partially Committed)
- 완료(Committed)
- 실패(Failed)
- 철회(Aborted)
트랜잭션 제어언어(TCL)
병행 제어 기법의 종류
- 로킹(Locking) : 하나의 트랜잭션을 실행하는 동안 특정 데이터 항목에 대해서 다른 모든 트랜잭션이 동시에 접근하지 못하도록 상호배제(Mutual Exclusion) 기능을 제공하는 기법이다.
- 로킹 단위가 작아지면 데이터베이스 공유도가 증가한다.
- 로킹 단위가 작아지면 로킹 오버헤드가 증가한다.
- 낙관적 검증(Optimistic Validation) : 트랜잭션이 어떠한 검증도 수행하지 않고 일단 트랜잭션을 수행하고, 트랜잭션 종료 시 검증을 수행하여 데이터베이스에 반영하는 기법이다.
- 타임 스탬프 순서(Time Stamp Ordering) : 트랜잭션과 트랜잭션이 읽거나 갱신한 데이터에 대해 트랜잭션이 실행을 시작하기 전에 타임 스탬프를 부여하여 부여된 시간에 따라 트랜잭션 작업을 수행하는 기법이다.
- 다중버전 동시성 제어(MVCC) : 트랜잭션 타임스탬프와 접근하려는 데이터의 타임스탬프를 비교하여 직렬가능성이 보장되는 적절한 버전을 선택하여 접근하도록 하는 기법이다.
- 2PC(2 Phase Commit) : 여러 개의 분산 데이터베이스 시스템에서 트랜잭션의 일관성을 유지하기 위한 기법이다.
고립화 수준 종류
- Read Uncommitted : 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용
- Read Committed : 아직 커밋되지 않은 데이터를 다른 트랜젝션이 읽는 것을 허용하지 않는다.
- Repetable Read : 선형 트랜잭션이 특정 데이터를 읽을 때, 트랜잭션 종료 시까지 해당 데이터에 대한 갱신, 삭제를 제한한다.
- Serializable Read : 선형 트랜잭션이 특정 데이터 영역을 순차적으로 읽을 때, 해당 데이터 영역 전체에 대한 접근을 제한한다.
데이터베이스 회복 요소
- REDO : 데이터베이스가 비정상적으로 종료되었을 때 디스크에 저장된 로그를 분석하여 트랜잭션의 시작과 완료에 대한 기록이 있는 트랜잭션들의 작업을 재작업하는 기법이다.
- UNDO : 데이터베이스가 비정상적으로 종료되었을 때 디스크에 저장된 로그를 분석하여 트랜잭션의 시작은 있지만, 완료에 대한 기록이 없는 트랜잭션들이 작업한 변경 내용들을 모두 취소하는 기법이다.
회복 기법 종류
- 로그 기반 회복 기법
- 지연 갱신 회복 기법 : 트랜잭션이 완료되기 전까지 데이터베이스에 기록하지 않는 기법이다.
- 즉각 갱신 회복 기법 : 트랜잭션 수행 중 갱신 결과를 바로 데이터베이스에 반영하는 기법이다.
- 체크 포인트 회복 기법 : 장애 발생 시 체크포인트 이후에 처리된 트랜잭션에 대해서만 장애 발생 이전 상태로 복원시키는 기법이다.
- 그림자 페이징 회복 기법 : 데이터베이스 트랜잭션 수행 시 복제본을 생성하여 데이터베이스 장애 시 이를 이용해 복구하는 기법이다.
스키마 구성
뷰의 장단점
- 장점
- 논리적 독립성 제공 : 데이터베이스에 영향을 주지 않고 애플리케이션이 원하는 형태로 데이터베이스에 접근 가능
- 데이터 조작 연산 간소화
- 보안 기능 제공
- 단점
- 뷰 자체 인덱스 불가
- 뷰 변경 불가
- 데이터 변경 제약 존재