트랜잭션(Transaction) I DBMS는 다수 사용자(Multi User) 용 대표적인 DB 응용 항공기 예약, 신용카드 처리, 은행 업무, 할인점 Checkout 등 공유해야 할 정보는? 수천/수만 명의 동시 사용자가 공유 정보에 접근 DBMS는 계산보다 입출력에 많은 시간을 보낸다 O.S.(Operating System)은 다수의 프로그램을 동시에 수행하듯이 여러 Transaction을 처리해야~~
트랜잭션(Transaction) 2 여러 Transaction을 동시에 수행한 결과와 순차적으로 수행한 결과가 같아야~~ DB의 일관성(Consistency) 보장 DBMS의 Concurrency Control(동시성 제어) 모듈이 담당 컴퓨터 시스템의 이상에 대한 복구 기능 DB의 Recovery Module Transaction Management Concurrency Module과 Recovery Module로 구성 Transaction DB 응용에서 하나의 논리적인 단위로 여러 개의 DB 연산(SQL 명령어)으로 만들어 진다
Transaction 예제 전체 사원의 급여를 10% 인상 1234구좌에서 5678로 십만원 이체 Update Employee Set salary=salary* 1.10 500명 전원의 봉급이 인상되거나 아님 한명도 처리되지 않도록~~~ 1234구좌에서 5678로 십만원 이체 Update customer set balance=balance-100000 where acct_no = 1234; Update customer set balance=balance +100000 where acct_no = 5678; Update 명령문 두개가 함께 수행되거나 아님 전혀 수행되지 않거나... 두개의 명령문이 하나의 단위(Transaction)로 처리 되어야~~~
Transaction 특징 ACID Atomicity(원자성) : all or nothing Consistency(일관성) : DB의 상태를 의미 Isolation(고립성) : 동시 처리에서 개개의 transaction에 대해 Durability(지속성) : Transaction이 완료되면 그 결과는 지속됨
Transaction 제어 Transaction은 범위를 갖는다 Transaction의 상태 Transaction 관리 명령어 Begin …. End Transaction의 상태 Begin/Commit(완료)/Abort(취소) Transaction 관리 명령어 Checkpoint/Commit/Rollback Transaction이 실패하는 원인 시스템 고장, transaction 고장, 매체 고장, 통신고장, 자연재해, 부주의 또는 고의적인 고장
동시성 제어(Concurrency Control) 다수 사용자를 지원하기 위해서 제어 없이는 여러 가지 문제 발생 Lost update Dirty read, unrepeatable read 등 로킹(Locking)을 이용하여 공유를 제어 Exclusive Lock Shared Lock
갱신 손실(Lost Update) I
갱신 손실(Lost Update) 2
Recovery(회복) Transaction을 수행 중 시스템이 다운되었을 때 어떻게 ACID를 구현하나? 로그(log) 파일을 이용하는 방법 로그 레코드들 [Transaction-ID, start] [Transaction-ID, X, old_value, new_value] [Transaction-ID, Commit] [Transaction-ID, Abort] 등으로 작업을 수록
Log Record의 예
Recovery 과정