트랜잭션(Transaction)
- 데이터베이스에 대한 작업의 단위
- e.g. 은행의 계좌이체, 입금, 계좌조회 / 학사업무 시스템의 수강 신청, 수강조회 등
- 하나 이상의 SQL문으로 이루어짐
- 트랜잭션의 특성(property) - ACID 성질
- 원자성(atomicity): 전부 아니면 전무(all or nothing)
- 일관성(consistency)
- 격리성(isolation)
- 영속성(durability)
트랜잭션의 종료
- 트랜잭션의 종료는 다음 중 하나가 되어야 함
- Commit
- 트랜잭션의 성공적인 종료를 나타냄
- 트랜잭션 수행 도중 변경된 내용은 반드시 영속적으로 저장되어야 함
- Rollback
- 트랜잭션이 실패하였음을 나타냄
- 트랜잭션의 실행 이전 상태로 데이터베이스의 상태가 복구되어야 함
- Commit
트랜잭션의 상태
- 활동(active): 실행 중인 상태
- 부분 완료(partially committed): 마지막 명령문을 실행한 직후
- 실패(failed): 정상적인 실행이 불가능하여 중단된 상태
- 철회(aborted): 실행 실패로 인해 rollback을 수행한 상태
- 완료(committed): 성공적으로 완료하여 commit을 수행한 상태
트랜잭션 종료를 명확히 나타낸 예
BEGIN_TRANS:
update ACCOUNT
set balance = balace - 100
where accout_id = 'A';
IF ERROR GO TO UNDO;
update ACCOUNT
set balance = balance + 100
where account_id = 'B';
IF ERROR GO TO UNDO;
COMMIT TRANS;
GO TO FINISH;
UNDO:
ROLLBACK TRANS;
FINISH:
RETURN;
END_TRANS;
트랜잭션 기능 제공을 위한 DBMS 기능
- 회복(recovery) 또는 고장회복
- DBMS에 장애가 발생하였을 때, 장애 발생 이전의 일관된 상태(consistent state)로 데이터베이스의 상태를 복원시키는 기능
- 트랜잭션의 원자성, 일관성, 지속성을 보장
- 병행 제어(concurrency control)
- 데이터베이스를 동시에 접근하는 트랜잭션들 간의 상호 간섭으로 인해 잘못된 데이터가 발생하지 않도록 제어하는 기능
- 트랜잭션의 격리성, 일관성, 지속성을 보장
DBMS의 쓰기
강의 자료 참고
장애(failure): 논리적 오류, S/W 및 H/W 오류, 고장 등으로 정상적인 실행이 불가능한 상태
- 트랜잭션 장애: 개별 트랜잭션 수준에서 문제 발생으로 트랜잭션이 정상적으로 수행될 수 없는 상태
- 시스템 장애: DBMS 서버 수준에서 문제가 발생하여 서버가 정상적으로 수행될 수 없게 된 상태
- 미디어 장애: 데이터베이스 저장소(디스크)에 문제가 발생하여 데이터를 사용할 수가 없게 된 상태
트랜잭션에 장애가 발생했을 때의 문제점
커밋하지 않은 트랜잭션이 갱신한 데이터를 모두 이전 상태로 돌려야 함
- DB서버가 즉시 갱신(immediate update) 정책을 사용하면 문제가 발생할 수 있음
- 즉시 갱신: 커밋되지 않은 트랜잭션의 데이터가 데이터베이스에 기록될 수 있도록 하는 것으로, 결과적으로 미완료 갱신을 유발
- 미완료 갱신(uncommitted update): 즉시 갱신에 의해 데이터베이스에 기록된 데이터
시스템 장애가 발생했을 때의 문제점
- 미완료 갱신을 이전 상태로 돌려야 함
- 커밋된 데이터나 지연 갱신으로 인해 반영되지 못한 데이터에 대해 커밋된 데이터로 기록해야 함
- 지연 갱신 정책(deferred update policy)
- 트랜잭션이 커밋 시점에 갱신한 데이터를 디스크에 기록하지 않고 나중에 기록하는 것
- 결과적으로 성공적으로 종료(커밋)한 트랜잭션의 데이터가 디스크에 기록되지 않을 수 있음
- 지연 갱신 정책(deferred update policy)
미디어 장애가 발생했을 때의 문제점
- 데이터베이스에 접근할 수 없음
- 가장 최근의 데이터베이스를 새로 만들어야 함
회복
- 회복 원리
- 데이터 중복(data redundancy)을 이용
- 덤프(dump)
- 데이터베이스 전체를 주기적으로 복제
- 저널(journal) 또는 로그(log)
- 변경되는 레코드(또는 페이지)의 변경 이전값과 이후값을 저장
- 로그 저장소는 장애가 발생해서는 안 됨
- 덤프(dump)
- 데이터 중복(data redundancy)을 이용
- 회복 관리자(recovery manager)
- DBMS 서버 내의 한 모듈로 장애 발생 탐지 및 고장 회복 기능을 담당
로그 레코드의 예
<T, Start>: 트랜잭션 T의 시작을 기록
<T, X, V(old), V(new)>: 트랜잰션 T에서 데이터 X를 V(old) 값에서 V(new) 값으로 변경한 사실을 기록
<T, Commit>: 트랜잭션 T의 commit 사실을 기록
<T, Rollback>: 트랜잭션 T의 rollback 사실을 기록
로그 및 데이터베이스의 백업
- 데이터베이스의 백업
- 온라인 데이터베이스(online database)
- 현재 온라인으로 사용 중인 데이터베이스
- 보존 데이터베이스(archival database)
- 일정 시점에서 데이터베이스 전체를 백업 받은 것
- 테이프 등의 3차 저장장치에 보관
- 온라인 데이터베이스(online database)
- 로그의 백업
- 온라인 로그(online log)
- 현재 온라인으로 사용 중인 로그
- 보존 로그(archival log)
- 온라인 로그를 일정 시점에 백업한 것
- 온라인 로그의 크기를 줄일 수 있음
- 온라인 로그(online log)
로그를 사용한 회복
강의 자료 참고
트랜잭션 실행 예
강의 자료 참고
로그의 분석 및 적용
로그의 시작점부터 검사하여
- <T, Start> 로그만 있고 <T, Commit>이 없으면 T에 대해서는 UNDO(T)를 실행
- UNDO(T): 트랜잭션 T의 모든 로그레코드에서 OLD 값을 데이터베이스에 적용
- <T, Start>와 <T, Commit>이 모두 있으면 REDO(T)를 수행
- REDO(T): 트랜잭션 T의 모든 로그레코드에서 NEW 값을 데이터베이스에 적용
검사점 회복
- 시스템 장애에 대한 고장회복 시 로그를 처음부터 읽고 REDO와 UNDO를 수행해야 함
→ 고장회복에 소요되는 시간 大
→ 불필요한 REDO 실행 - 검사점(checkpoint)
- 주기적으로 버퍼 내에 존재하는 갱신된 페이지를 모두 디스크에 기록(flush)
- <Checkpoint> 로그를 기록
- 검사점 회복
① 고장회복 시 로그를 뒤에서부터 읽음
② <Checkpoint> 로그를 발견하면
③ <Checkpoint> 이후의 로그들에 대해서만 REDO와 UNDO를 수행
트랜잭션의 병행 수행(Concurrent Execution)
- 다수의 트랜잭션을 동시에 수행하는 것
- 서로 다른 트랜잭션 내의 연산들이 뒤섞여 실행
- 트랜잭션들 간의 데이터 충돌(conflict)로 인해 문제가 발생할 수 있음
- 갱신 분실(lost update): 강의 자료 참고
- 데이터 모순(data inconsistency): 강의 자료 참고
- 연쇄 롤백(cascading rollback): 강의 자료 참고
병행 제어(Concurrency Control)
- 다수의 트랜잭션을 병행 수행하더라도 문제가 발생하지 않도록 트랜잭션 실행을 관리하는 기법
- 잠금(Locking) 기법이 대표적
- 잠금 관리자(lock manager): 잠금 기능을 관리하는 DBMS 서버 내의 모듈
잠금(Locking) 기법
- 접근하는 데이터에 대해 잠금(lock)과 잠금해제(unlock)를 사용
- 잠금의 종류
- 공유 잠금(shared-lock, S-lock): 공유 잠금을 요청한 트랜잭션들 간에는 동시에 데이터를 접근할 수 있음
- 배타적(전용) 잠금(exclusive-lock, X-lock): 오직 하나의 트랜잭션만이 데이터에 접근할 수 있음
잠금을 사용한 예
강의 자료 참고
2단계 잠금 규약
- 2 Phase Locking protocol(2PL)
- 트랜잭션의 2단계로 잠금을 사용함
- 확장 단계(growing phase): 트랜잭션은 lock만 가능하고 unlock은 불가
- 축소 단계(shrink phase): 트랜잭션은 unlock만 가능하고 lock은 불가
- 즉, unlock을 시작하면 lock을 할 수 없음
2PL의 예
강의 자료 참고
'데이터베이스 Database' 카테고리의 다른 글
Chapter 13 무결성과 보안 (0) | 2020.12.10 |
---|---|
Chapter 10 데이터베이스 저장구조 (0) | 2020.12.06 |
Chapter 9 데이터베이스 설계 (0) | 2020.12.05 |
Chapter 8 ER 모델 ✍ (0) | 2020.11.16 |
Chapter 7 데이터 종속성과 정규화 ✍ (0) | 2020.11.16 |