본문 바로가기

Study/정보처리기사 실기

[정보처리기사 실기] SQL 응용 _ 데이터베이스 고급 기능

트랜잭션 (Transaction)

-  데이터베이스 작업의 논리적 단위로 일련의 연산 집합 의미

- 데이터베이스 병행 제어 및 회복 작업 기본 단위

- 데이터베이스 일관된 상태를 또 다른 일관된 상태로 변환시키는 작업

- 하나의 트랜잭션은 Commit 되거나 Rollback 되어야 함

 

트랜잭션 Rollback

장애 발생시 데이터베이스 상태를 장애 이전 상태로 복귀시키는 제어어


트랜잭션 특성 (ACID)

원자성
(Atomicity)
트랜잭션은 완벽하게 수행 완료되거나 전혀 수행되지 않아야 함 (All or Nothing)
일관성
(Consistencty)
트랜잭션 수행 전과 수행 후 데이터베이스 상태 일치해야 함
격리성 (독립성)
(Isolation)
병행수행 환경에서 하나의 트랜잭션 실행 중일 때 다른 트랜잭션은 같은 데이터에 접근할 수 없음
영속성
(Durability)
완료된 트랜잭션 결과는 영구적으로 유지되어야 함

병행제어

둘 이상 트랜잭션이 동시에 접속해 연산 수행할 때, 트랜잭션 간 경쟁 일어나지 않도록 트랜잭션 수행 적절히 제어하는 것

 

1) 병행 수행 시 문제점

구분 의미
갱신 분실
(Last Update)
두 개 이상 트랜잭션이 갱신 연산 수행 시 한 트랜잭션만 갱신한 결과 되고, 다른 트랜잭션
갱신 연산 무효 되는 문제
모순성 = 불일치 분석
(Inconsistnecy)
두 트랜잭션 실행 후 데이터베이스 상태 불일치 되는 문제
연쇄 복귀
(Cascading Rollback)
같은 데이터에 접근한 두 트랜잭션 중 하나가 Rollback 되었을 때 다른 트랜잭션도 함께
Rollback 해야 하는 문제
미완료 의존성
(Uncommitted Dependency)
하나의 트랜잭션 수행이 실패한 후 회복되기 전 다른 트랜잭션이 실패한 갱신 결과
참조하는 현상

2) 병행제어 기법

(1) 로킹 (Locking) 기법

- 데이터 항목의 액세스 상호 배타적으로 제어하는 방법

- 두 개의 기본 연산 Lock와 Unlock으로 데이터 항목 제어


(2) 타임스탬프 (Time Stamp)

- 트랜잭션 실행 시 시스템에서 부여하는 값

- 트랜잭션 간 실행 순서를 타임스탬프로 부여해 병행성 보장


회복

장애 (Failure) 발생 시, 데이터베이스를 장애 발생 이전 일관된 상태로 복원시키는 것 의미

 

1) 회복 원리

- 덤프 (Dump) : 주기적으로 데이터베이스 전체 다른 장치에 복제

- 로그 (Log) : 일지 (Journal)로 데이터베이스 변경 시 데이터 옛 값 (Old Value), 새 값 (New Value)을 별도 파일에

기록해 두는 것


2) 회복 연산

- 재실행 (Redo) : 발생한 변경에 대해서만 재실행함으로써 데이터베이스 복원

- 실행취소 (Undo) : 모든 변경 취소해 데이터베이스를 원래 상태로 복원


3) 회복 기법

 

(1) 즉시 갱신

- 트랜잭션이 연산 실행하고 있는 활동 상태에서 데이터 변경 결과를 데이터베이스와 로그파일에 즉시 반영

- 회복 시 완료 트랜잭션은 Redo, 미완료 트랜잭션은 Undo 실행

- 데이터베이스 회복 시 Redo, Undo를 모두 실행하는 트랜잭션 처리법으로 트랜잭션 수행 중 갱신 결과를 바로

DB에 반영하는 기법

 

문제) 로그가 다음과 같을 때 즉시 갱신 회복작업 후 데이터 A, B, C 값은?

A = 1000, B = 2000, C = 3000 초기값 가짐

 

(a)

<T1, Start>

<T1, A, 1000, 900 Start>

<T1, B, 2000, 2100>

A = 1000 / B = 2000

 

(b)

<T1, Start>

<T1, A, 1000, 900>

<T1, B, 2000, 2100>

<T1, Commit>

<T2, Start>

<T2, C, 3000, 2800>

A = 900 / B = 2100 / C = 3000

 

(c)

<T1, Start>

<T1, A, 1000, 900>

<T1, B, 2000, 2100>

<T1, Commit>

<T2, Start>

<T2, C, 3000, 2800>

<T2, Commit>

A = 900 / B = 2100 / C = 2800


(2) 지연 갱신 회복

- 트랜잭션이 부분 완료될 때까지 모든 변경 내용에 대해 데이터베이스 갱신 지연시키고, 로그 파일에만 저장

- 회복 시 완료 트랜잭션은 Redo, 미완료 트랜잭션은 로그만 삭제 즉, Undo 필요 없음

 

문제) 로그가 다음과 같을 때 지연 갱신 회복작업 후 데이터 A, B, C 값은?

A = 1000, B = 2000, C = 3000 초기값 가짐

 

(a)

<T1, Start>

<T1, A, 900>

<T1, B, 2100>

A = 1000 / B = 2000

 

(b)

<T1, Start>

<T1, A, 900>

<T1, B, 2100>

<T1, Commit>

<T2, Start>

<T2, C, 2800>

A = 900 / B = 2100 / C = 3000

 

(c)

<T1, Start>

<T1, A, 900>

<T1, B, 2100>

<T1, Commit>

<T2, Start>

<T2, C, 2800>

<T2, Commit>

A = 900 / B = 2100 / C = 2800


(3) 검사시점 회복 (check point)

- 빠른 회복 작업 수행위해 일정한 시간 간격으로 검사시점 만들어 검사시점 전, 후 로그 적용 방법 다르게 하는 방법

- 검사시점 이전 트랜잭션에 대해 회복 작업 필요 없음