트랜잭션 (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)
- 빠른 회복 작업 수행위해 일정한 시간 간격으로 검사시점 만들어 검사시점 전, 후 로그 적용 방법 다르게 하는 방법
- 검사시점 이전 트랜잭션에 대해 회복 작업 필요 없음
'Study > 정보처리기사 실기' 카테고리의 다른 글
[정보처리기사 실기] SQL 응용 _ 응용 및 절차형 SQL (0) | 2025.03.12 |
---|---|
[정보처리기사 실기] SQL 응용 _ 기본 SQL (0) | 2025.03.11 |
[정보처리기사 실기] 애플리케이션 테스트 관리 _ 애플리케이션 성능 개선 (0) | 2025.03.08 |
[정보처리기사 실기] 애플리케이션 테스트 관리, 애플리케이션 통합 테스트 (0) | 2025.03.06 |
[정보처리기사 실기] 애플리케이션 테스트 관리 _ 애플리케이션 테스트 설계 (1) | 2025.03.05 |