트랜잭션 (transaction) 항공기예약, 은행, 신용카드처리, 대형할인점등에서는대규모데이터베이스를수백, 수천명이상의사용자들이동시에접근함 많은사용자들이동시에데이터베이스의서로다른부분또는동일한부분을접근하면서데이터베이스를사용함 동시성제어 (concurrency control) 동시에수행되는트랜잭션들이데이터베이스에미치는영향은이들을순차적으로수행하였을때데이터베이스에미치는영향과같도록보장 다수사용자가데이터베이스를동시에접근하도록허용하면서데이터베이스의일관성을유지함 2
( 계속 ) 트랜잭션 (transaction)( 계속 ) 회복 (recovery) 데이터베이스를갱신하는도중에시스템이고장나도데이터베이스의일관성을유지함 3
9.1 트랜잭션개요 데이터베이스시스템환경에서흔히볼수있는몇가지응용의예 이때 500명전원의급여가수정되거나한명의급여도갱신되지않도록 DBMS가보장해야함 그림 9.1과같이 320번째사원까지수정한상태에서컴퓨터시스템이다운된후에재기동되었을때 DBMS는어떻게대응해야하는가? DBMS가추가로정보를유지하지않는다면 DBMS가재기동된후에어느직원의투플까지수정되었는가를알수없음 로그 (log) 유지 4
9.1 트랜잭션개요 ( 계속 ) 5
9.1 트랜잭션개요 ( 계속 ) 데이터베이스시스템환경에서흔히볼수있는몇가지응용의 예 ( 계속 ) 6
9.1 트랜잭션개요 ( 계속 ) 두개의 UPDATE문을사용하여, 하나의 UPDATE문에서는정미림의잔액을 100,000원감소시키고, 또다른 UPDATE문에서는안명석의잔액을 100,000원증가시킴 첫번째 UPDATE문을수행한후에두번째 UPDATE문을수행하기전에컴퓨터시스템이다운되면재기동한후에 DBMS가어떻게대응해야하는가? 위의두개의 UPDATE문은둘다완전하게수행되거나한 UPDATE 문도수행되어서는안되도록, 즉하나의트랜잭션 ( 단위 ) 처럼 DBMS가보장해야함 기본적으로각각의 SQL문이하나의트랜잭션으로취급됨 두개이상의 SQL문들을하나의트랜잭션으로취급하려면사용자가이를명시적으로표시해야함 7
9.1 트랜잭션개요 ( 계속 ) 데이터베이스시스템환경에서흔히볼수있는몇가지응용의 예 ( 계속 ) 8
9.1 트랜잭션개요 ( 계속 ) 9
9.1 트랜잭션개요 ( 계속 ) 만일 SQL문 (2) 를수행하고 SQL문 (3) 을수행하기전에컴퓨터시스템이다운되고재기동한후에 DBMS가어떻게대응해야하는가? 위의세개의 SQL문이모두완전하게수행되거나하나도수행되어서는안되도록, 즉하나의트랜잭션 ( 단위 ) 처럼 DBMS가취급해야함 DBMS는각 SQL문의의미를알수없으므로하나의트랜잭션으로취급해야하는 SQL문들의범위를사용자가명시적으로표시해야함 10
트랜잭션의특성 (ACID 특성 ) 9.1 트랜잭션개요 ( 계속 ) 원자성 (Atomicity) 한트랜잭션내의모든연산들이완전히수행되거나전혀수행되지않음 (all or nothing) 을의미 DBMS의회복모듈은시스템이다운되는경우에, 부분적으로데이터베이스를갱신한트랜잭션의영향을취소함으로써트랜잭션의원자성을보장함 완료된트랜잭션이갱신한사항은트랜잭션의영향을재수행함으로써트랜잭션의원자성을보장함 11
9.1 트랜잭션개요 ( 계속 ) 트랜잭션의특성 (ACID 특성 )( 계속 ) 일관성 (Consistency) 어떤트랜잭션이수행되기전에데이터베이스가일관된상태를가졌다면트랜잭션이수행된후에데이터베이스는또다른일관된상태를가짐 트랜잭션이수행되는도중에는데이터베이스가일시적으로일관된상태를갖지않을수있음 12
9.1 트랜잭션개요 ( 계속 ) 13
9.1 트랜잭션개요 ( 계속 ) 트랜잭션의특성 (ACID 특성 )( 계속 ) 고립성 (Isolation) 한트랜잭션이데이터를갱신하는동안이트랜잭션이완료되기전에는갱신중인데이터를다른트랜잭션들이접근하지못하도록해야함 다수의트랜잭션들이동시에수행되더라도그결과는어떤순서에따라트랜잭션들을하나씩차례대로수행한결과와같아야함 DBMS의동시성제어모듈이트랜잭션의고립성을보장함 DBMS는응용들의요구사항에따라다양한고립수준 (isolation level) 을제공함 14
9.1 트랜잭션개요 ( 계속 ) 트랜잭션의특성 (ACID 특성 )( 계속 ) 지속성 (Durability) 일단한트랜잭션이완료되면이트랜잭션이갱신한것은그후에시스템에고장이발생하더라도손실되지않음 완료된트랜잭션의효과는시스템이고장난경우에도데이터베이스에반영됨 DBMS의회복모듈은시스템이다운되는경우에도트랜잭션의지속성을보장함 15
9.1 트랜잭션개요 ( 계속 ) 16
9.1 트랜잭션개요 ( 계속 ) 트랜잭션의완료 (commit) 트랜잭션에서변경하려는내용이데이터베이스에완전하게반영됨 SQL 구문상으로 COMMIT WORK 트랜잭션의철회 (abort) 트랜잭션에서변경하려는내용이데이터베이스에일부만반영된경우에는원자성을보장하기위해서, 트랜잭션이갱신한사항을트랜잭션이수행되기전의상태로되돌림 SQL 구문상으로 ROLLBACK WORK 17
9.1 트랜잭션개요 ( 계속 ) 18
9.1 트랜잭션개요 ( 계속 ) 19
9.1 트랜잭션개요 ( 계속 ) 트랜잭션이성공하지못하는원인 시스템 ( 사이트 ) 고장 중앙처리장치, 주기억장치, 전원공급장치등이고장남 트랜잭션고장 트랜잭션고장은트랜잭션이수행되는도중에철회됨 매체고장 디스크헤드, 디스크콘트롤러등이고장나서보조기억장치의전부또는일부내용이지워짐 통신고장 자연적재해 부주의또는고의적인고장 20
9.2 동시성제어 동시성제어 대부분의 DBMS들은다수사용자용 여러사용자들이동시에동일한테이블을접근하기도함 DBMS의성능을높이기위해여러사용자의질의나프로그램들을동시에수행하는것이필수적 동시성제어기법은여러사용자들이다수의트랜잭션들을동시에수행하는환경에서부정확한결과를생성할수있는, 트랜잭션들간의간섭이생기지않도록함 21
9.2 동시성제어 22
9.2 동시성제어 직렬스케줄 (serial schedule) 여러트랜잭션들의집합을한번에한트랜잭션씩차례대로수행함 비직렬스케줄 (non-serial schedule) 여러트랜잭션들을동시에수행함 직렬가능 (serializable) 비직렬스케줄의결과가어떤직렬스케줄의수행결과와동등함 23
9.2 동시성제어 ( 계속 ) 데이터베이스연산 Input(X) 연산은데이터베이스항목 X를포함하고있는블록을주기억장치의버퍼로읽어들임 Output(X) 연산은데이터베이스항목 X를포함하고있는블록을디스크에기록함 read_item(x) 연산은주기억장치버퍼에서데이터베이스항목 X의값을프로그램변수 X로복사함 write_item(x) 연산은프로그램변수 X의값을주기억장치내의데이터베이스항목 X에기록함 24
9.2 동시성제어 ( 계속 ) 25
9.2 동시성제어 ( 계속 ) 동시성제어를하지않고다수의트랜잭션을동시에수행할때생길수있는문제 갱신손실 (lost update): 수행중인트랜잭션이갱신한내용을다른트랜잭션이덮어씀으로써갱신이무효가되는것 오손데이터읽기 (dirty read): 완료되지않은트랜잭션이갱신한데이터를읽는것 반복할수없는읽기 (unrepeatable read): 한트랜잭션이동일한데이터를두번읽을때서로다른값을읽는것 26
9.2 동시성제어 ( 계속 ) 예 : 갱신손실하나의 SQL문은 DBMS 내에서여러개의명령들로나뉘어수행된다. 다수사용자환경에서는여러사용자들이동시에요청한트랜잭션의명령들이섞여서수행될수있다. 트랜잭션 T1은 X에서 Y로 100000을이체하고, 트랜잭션 T2는 X의값에 50000을더하려고한다. 두트랜잭션이수행되기전의 X와 Y의초기값이각각 300000과 600000이라고가정하면 T1의수행을먼저완료하고 T2의수행을완료하던지, T2의수행을먼저완료하고 T1의수행을완료하던지관계없이 X의최종값은 250000, Y의최종값은 700000이되어야한다. 27
9.2 동시성제어 ( 계속 ) 28
9.2 동시성제어 ( 계속 ) 예 : 오손데이터읽기그림 9.8에서트랜잭션 T1이정미림의잔액을 100000원감소시킨후에트랜잭션 T2는모든계좌의잔액의평균값을검색하였다. 그이후에 T1이어떤이유로철회되면 T1이갱신한정미림계좌의잔액은원래상태로되돌아간다. 따라서 T2는완료되지않은트랜잭션이갱신한데이터, 즉틀린데이터를읽었다. 29
9.2 동시성제어 ( 계속 ) 30
9.2 동시성제어 ( 계속 ) 예 : 반복할수없는읽기그림 9.9에서먼저트랜잭션 T2는모든계좌의잔액의평균값을검색하였다. 트랜잭션 T2가완료되기전에트랜잭션 T1이정미림의잔액을 100000원감소시키고완료되었다. 트랜잭션 T2가다시모든계좌의잔액의평균값을검색하면첫번째평균값과다른값을보게된다. 동일한읽기연산을여러번수행할때매번서로다른값을보게될수있다. 31
9.2 동시성제어 ( 계속 ) 32
9.2 동시성제어 ( 계속 ) 9.1절의항공기예약트랜잭션 여러여행사에서동시에고객들의요청에따라동일한날짜에출발하는항공기의빈좌석유무를검사할수있음 그림 9.10의순서와같이만일두여행사에서각각트랜잭션을수행하는과정에SQL문 (1) 의수행결과로특정항공기에빈좌석이1개남아있다는사실을확인하고동시에 SQL문 (2) 와 (3) 을수행하여팔린좌석수를 1만큼씩증가시키고자신의고객의정보를항공사데이터베이스에입력하려할때 DBMS가아무런조치를취하지않으면, 1개남은좌석에두명의고객이배정되는결과를초래하게됨 33
9.2 동시성제어 ( 계속 ) 34
9.2 동시성제어 ( 계속 ) 로킹 (locking) 데이터항목을로킹하는개념은동시에수행되는트랜잭션들의동시성을제어하기위해서가장널리사용되는기법 로크 (lock) 는데이터베이스내의각데이터항목과연관된하나의변수 각트랜잭션이수행을시작하여데이터항목을접근할때마다요청한로크에관한정보는로크테이블 (lock table) 등에유지됨 트랜잭션에서갱신을목적으로데이터항목을접근할때는독점로크 (Xlock, exclusive lock) 를요청함 트랜잭션에서읽을목적으로데이터항목을접근할때는공유로크 (S-lock, Shared lock) 를요청함 트랜잭션이데이터항목에대한접근을끝낸후에로크를해제 (unlock) 함 35
9.2 동시성제어 ( 계속 ) 36
9.2 동시성제어 ( 계속 ) 2단계로킹프로토콜 (2-phase locking protocol) 로크를요청하는것과로크를해제하는것이 2단계로이루어짐 로크확장단계가지난후에로크수축단계에들어감 일단로크를한개라도해제하면로크수축단계에들어감 37
9.2 동시성제어 ( 계속 ) 38
9.2 동시성제어 ( 계속 ) 2단계로킹프로토콜 ( 계속 ) 로크확장단계 (1단계) 로크확장단계에서는트랜잭션이데이터항목에대하여새로운로크를요청할수있지만보유하고있던로크를하나라도해제할수없음 로크수축단계 (2단계) 로크수축단계에서는보유하고있던로크를해제할수있지만새로운로크를요청할수없음 로크수축단계에서는로크를조금씩해제할수도있고 ( 그림 9.12), 트랜잭션이완료시점에이르렀을때한꺼번에모든로크를해제할수도있음 ( 그림 9.13) 일반적으로한꺼번에해제하는방식이사용됨 로크포인트 (lock point) 는한트랜잭션에서필요로하는모든로크를걸어놓은시점 39
9.2 동시성제어 ( 계속 ) 40
9.2 동시성제어 ( 계속 ) 데드록 (deadlock) 2단계로킹프로토콜에서는데드록이발생할수있음 데드록은두개이상의트랜잭션들이서로상대방이보유하고있는로크를요청하면서기다리고있는상태를말함 데드록을해결하기위해서는데드록을방지하는기법이나, 데드록을탐지하고희생자를선정하여데드록을푸는기법등을사용함 41
9.2 동시성제어 ( 계속 ) 데드록 ( 계속 ) 1 T1이 X에대해독점로크를요청하여허가받음 2 T2이 Y에대해독점로크를요청하여허가받음 3 T1이 Y에대해공유로크나독점로크를요청하면로크가해제될때까지기다리게됨 4 T2가 X에대해공유로크나독점로크를요청하면로크가해제될때까지기다리게됨 42
9.2 동시성제어 ( 계속 ) 다중로크단위 (multiple granularity) 대부분의트랜잭션들이소수의투플들을접근하는데이터베이스응용에서는투플단위로로크를해도로크테이블을다루는시간이오래걸리지않음 트랜잭션들이많은투플을접근하는데이터베이스응용에서투플단위로만로크를한다면로크테이블에서로크충돌을검사하고, 로크정보를기록하는시간이오래걸림 트랜잭션이접근하는투플의수에따라로크를하는데이터항목의단위를구분하는것이필요함 한트랜잭션에서로크할수있는데이터항목이두가지이상있으면다중로크단위라고말함 데이터베이스에서로크할수있는단위로는데이터베이스, 릴레이션, 디스크블록, 투플등 43
9.2 동시성제어 ( 계속 ) 다중로크단위 ( 계속 ) 일반적으로 DBMS는각트랜잭션에서접근하는투플수에따라자동적으로로크단위를조정함 로크단위가작을수록로킹에따른오버헤드가증가함 로크단위가작을수록동시성의정도는증가함 44
9.2 동시성제어 ( 계속 ) 45
9.2 동시성제어 ( 계속 ) 예 : 다중단위로크 EMPLOYEE 릴레이션에속하는디스크블록b1에다섯개의투플 t1, t2, t3, t4, t5 가있다고가정하자. 또한트랜잭션 T1은이중에서투플 t1과 t4를갱신하고, 트랜잭션 T2는투플 t2를검색한다고가정하자. 만일로크단위가투플이라면두트랜잭션이접근하는투플들이서로상이하므로해당투플에로크를걸고두트랜잭션이동시에수행될수있다. 46
9.2 동시성제어 ( 계속 ) 예 : 다중단위로크트랜잭션 T1은블록단위, T2는투플단위로로크를하는경우에, 먼저 T1이블록 b1에대해독점로크를요청하여허가를받으면이블록에들어있는투플다섯개에도모두독점로크가걸린다. 그다음에트랜잭션 T2가투플 t2에대해공유로크를요청하면트랜잭션 T1이로크를풀때까지기다려야한다. 47
9.2 동시성제어 ( 계속 ) 팬텀문제 (phantom problem) 두개의트랜잭션 T1과 T2가그림 4.8의 EMPLOYEE 릴레이션에대해서아래와같은순서대로수행된다고가정 그림 9.16에서트랜잭션 T1은 EMPLOYEE 릴레이션에서 1번부서에근무하는사원들의이름을검색하는동일한 SELECT문을두개포함하고, 트랜잭션 T2는 1번부서에근무하는사원투플을한개삽입하는 INSERT문을포함 48
9.2 동시성제어 ( 계속 ) 팬텀문제 (phantom problem) 두개의트랜잭션 T1과 T2가그림 4.8의 EMPLOYEE 릴레이션에대해서아래와같은순서대로수행된다고가정 그림 9.16에서트랜잭션 T1은 EMPLOYEE 릴레이션에서 1번부서에근무하는사원들의이름을검색하는동일한 SELECT문을두개포함하고, 트랜잭션 T2는 1번부서에근무하는사원투플을한개삽입하는 INSERT문을포함 49
9.2 동시성제어 ( 계속 ) 팬텀문제 (phantom problem)( 계속 ) 시간 1에트랜잭션 T1의 SELECT문이수행되면 1번부서에근무하는사원들의이름인박영권, 김상원이검색됨 시간 2에트랜잭션 T2의 INSERT문이수행되면 EMPLOYEE 릴레이션에 1번부서에근무하는정희연투플이삽입됨 시간 3에트랜잭션 T1의두번째 SELECT문이수행되면박영권, 김상원, 정희연이검색됨 즉한트랜잭션 T1에속한첫번째 SELECT문과두번째 SELECT문의수행결과가다르게나타남 이런현상을팬텀문제라고부름 50
9.3 회복 회복의필요성 어떤트랜잭션 T를수행하는도중에시스템이다운되었을때, T의수행효과가디스크의데이터베이스에일부반영되었을수있음 어떻게 T의수행을취소하여원자성을보장할것인가? 또한트랜잭션 T가완료된직후에시스템이다운되면 T의모든갱신효과가주기억장치로부터디스크에기록되지않았을수있음어떻게 T의수행결과가데이터베이스에완전하게반영되도록하여지속성을보장할것인가? 디스크의헤드등이고장나서디스크의데이터베이스를접근할수없다면어떻게할것인가? 51
9.3 회복 ( 계속 ) 회복의개요 여러응용이주기억장치버퍼내의동일한데이터베이스항목을갱신한후에디스크에기록함으로써성능을향상시키는것이중요함 버퍼의내용을디스크에기록하는것을가능하면최대한줄이는것이일반적 예 : 버퍼가꽉찼을때또는트랜잭션이완료될때버퍼의내용이디스크에기록될수있음 트랜잭션이버퍼에는갱신사항을반영했지만버퍼의내용이디스크에기록되기전에고장이발생할수있음 52
9.3 회복 ( 계속 ) 회복의개요 ( 계속 ) 고장이발생하기전에트랜잭션이완료명령을수행했다면회복모듈은이트랜잭션의갱신사항을재수행 (REDO) 하여트랜잭션의갱신이지속성을갖도록해야함 고장이발생하기전에트랜잭션이완료명령을수행하지못했다면원자성을보장하기위해서이트랜잭션이데이터베이스에반영했을가능성이있는갱신사항을취소 (UNDO) 해야함 53
9.3 회복 ( 계속 ) 저장장치의유형 주기억장치와같은휘발성저장장치에들어있는내용은시스템이다운된후에모두사라짐 디스크와같은비휘발성저장장치에들어있는내용은디스크헤드등이손상을입지않는한시스템이다운된후에도유지됨 안전저장장치 (stable storage) 는모든유형의고장을견딜수있는저장장치를의미 두개이상의비휘발성저장장치가동시에고장날가능성이매우낮으므로비휘발성저장장치에두개이상의사본을중복해서저장함으로써안전저장장치를구현함 54
9.3 회복 ( 계속 ) 재해적고장과비재해적고장 재해적고장 디스크가손상을입어서데이터베이스를읽을수없는고장 재해적고장으로부터의회복은데이터베이스를백업해놓은자기테이프를기반으로함 비재해적고장 그이외의고장 대부분의회복알고리즘들은비재해적고장에적용됨 로그를기반으로한즉시갱신, 로그를기반으로한지연갱신, 그림자페이징 (shadow paging) 등여러알고리즘 대부분의상용 DBMS에서로그를기반으로한즉시갱신방식을사용 55
9.3 회복 ( 계속 ) 로그를사용한즉시갱신 즉시갱신에서는트랜잭션이데이터베이스를갱신한사항이주기억장치의버퍼에유지되다가트랜잭션이완료되기전이라도디스크의데이터베이스에기록될수있음 데이터베이스에는완료된트랜잭션의수행결과뿐만아니라철회된트랜잭션의수행결과도반영될수있음 트랜잭션의원자성과지속성을보장하기위해 DBMS는로그라고부르는특별한화일을유지함 데이터베이스의항목에영향을미치는모든트랜잭션의연산들에대해서로그레코드를기록함 각로그레코드는로그순서번호 (LSN: Log Sequence Number) 로식별됨 56
9.3 회복 ( 계속 ) 57
9.3 회복 ( 계속 ) 58
9.3 회복 ( 계속 ) 로그를사용한즉시갱신 ( 계속 ) 주기억장치내의로그버퍼에로그레코드들을기록하고로그버퍼가꽉찰때디스크에기록함 로그는데이터베이스회복에필수적이므로일반적으로안전저장장치에저장됨 이중로그 (dual logging): 로그를두개의디스크에중복해서저장하는것 각로그레코드가어떤트랜잭션에속한것인가를식별하기위해서각로그레코드마다트랜잭션 ID를포함시킴 동일한트랜잭션에속하는로그레코드들은연결리스트로유지됨 59
9.3 회복 ( 계속 ) 로그레코드의유형 [Trans-ID, start] 한트랜잭션이생성될때기록되는로그레코드 [Trans-ID, X, old_value, new_value] 주어진 Trans_ID를갖는트랜잭션이데이터항목 X를이전값 (old_value) 에서새값 (new_value) 로수정했음을나타내는로그레코드 [Trans-ID, commit] 주어진 Trans_ID를갖는트랜잭션이데이터베이스에대한갱신을모두성공적으로완료하였음을나타내는로그레코드 [Trans-ID, abort] 주어진 Trans_ID를갖는트랜잭션이철회되었음을나타내는로그레코드 60
9.3 회복 ( 계속 ) 61
9.3 회복 ( 계속 ) 62
9.3 회복 ( 계속 ) 트랜잭션의완료점 (commit point) 한트랜잭션의데이터베이스갱신연산이모두끝나고데이터베이스갱신사항이로그에기록되었을때 DBMS의회복모듈은로그를검사하여로그에 [Trans-ID, start] 로그레코드와 [Trans-ID, commit] 로그레코드가모두존재하는트랜잭션들은재수행 [Trans-ID, start] 로그레코드는로그에존재하지만 [Trans-ID, commit] 로그레코드가존재하지않는트랜잭션들은취소 63
9.3 회복 ( 계속 ) 64
9.3 회복 ( 계속 ) 65
9.3 회복 ( 계속 ) 66
9.3 회복 ( 계속 ) 로그먼저쓰기 (WAL: Write-Ahead Logging) 트랜잭션이데이터베이스를갱신하면주기억장치의데이터베이스버퍼에갱신사항을기록하고, 로그버퍼에는이에대응되는로그레코드를기록함 만일데이터베이스버퍼가로그버퍼보다먼저디스크에기록되는경우에는로그버퍼가디스크에기록되기전에시스템이다운되었다가재기동되었을때주기억장치는휘발성이므로데이터베이스버퍼와로그버퍼의내용은전혀남아있지않음 로그레코드가없어서이전값을알수없으므로트랜잭션의취소가불가능함 따라서데이터베이스버퍼보다로그버퍼를먼저디스크에기록해야함 67
9.3 회복 ( 계속 ) 체크포인트 (checkpoint) 시스템이다운된시점으로부터오래전에완료된트랜잭션들이데이터베이스를갱신한사항은이미디스크에반영되었을가능성이큼 DBMS가로그를사용하더라도어떤트랜잭션의갱신사항이주기억장치버퍼로부터디스크에기록되었는가를구분할수없음 따라서 DBMS는회복시재수행할트랜잭션의수를줄이기위해서주기적으로체크포인트를수행함 체크포인트시점에는주기억장치의버퍼내용이디스크에강제로기록되므로, 체크포인트를수행하면디스크상에서로그와데이터베이스의내용이일치하게됨 체크포인트작업이끝나면로그에 [checkpoint] 로그레코드가기록됨 일반적으로체크포인트를 10~20분마다한번씩수행함 68
9.3 회복 ( 계속 ) 체크포인트를할때수행되는작업 수행중인트랜잭션들을일시적으로중지시킴. 회복알고리즘에따라서는이작업이필요하지않을수있음 주기억장치의로그버퍼를디스크에강제로출력 주기억장치의데이터베이스버퍼를디스크에강제로출력 [checkpoint] 로그레코드를로그버퍼에기록한후디스크에강제로출력 체크포인트시점에수행중이던트랜잭션들의 ID도 [checkpoint] 로그레코드에함께기록 일시적으로중지된트랜잭션의수행을재개 69
9.3 회복 ( 계속 ) 예 : 체크포인트를하지않았을때그림 9.19는시스템이다운된후에재기동되었을때회복모듈이디스크에저장되어있는로그레코드를조사하여얻은것. 트랜잭션 T0, T1, T3, T4, T5는재수행. 트랜잭션 T2, T6은취소. 70
9.3 회복 ( 계속 ) 예 : 체크포인트를했을때그림 9.20도디스크에저장되어있는로그레코드를조사하여얻은것. 트랜잭션 T0, T1, T3은무시. 트랜잭션 T4, T5는재수행. 트랜잭션 T2, T6은취소. 71
9.3 회복 ( 계속 ) 데이터베이스백업과재해적고장으로부터의회복 아주드물지만, 데이터베이스가저장되어있는디스크의헤드등이고장나서데이터베이스를읽을수없는경우가발생함 이런경우에데이터베이스를회복하는한가지방법은주기적으로자기테이프에전체데이터베이스와로그를백업하고, 자기테이프를별도의공간에안전하게보관하는것 사용자들에게데이터베이스사용을계속허용하면서, 지난번백업이후에갱신된내용만백업을하는점진적인백업 (incremental backup) 이바람직 72
9.4 Transact-SQL 의트랜잭션 Transact-SQL 의트랜잭션 SQL2 의트랜잭션구문을지원함 트랜잭션의시작과끝 사용자나응용프로그램은트랜잭션시작과끝을명시하여트랜잭션을제어함 한트랜잭션은임의의 SQL문으로시작되거나, 트랜잭션의시작을표시하는명시적인키워드를사용하여시작됨 BEGIN TRANSACTION 이트랜잭션의시작을명시적으로표시하기위해사용됨 한트랜잭션의끝을표시하기위해서사용자는 COMMIT 또는 ROLLBACK문을입력함 사용자가정의한트랜잭션이름이허용되는것을제외하면 COMMIT TRANSACTION문은 COMMIT WORK와동일한기능을가짐 73
9.4 Transact-SQL 의트랜잭션 ( 계속 ) 예 : 트랜잭션의시작을명시적인키워드로나타내지않고, 두개의 UPDATE문으로이루어진트랜잭션을명시하였다. COMMIT 키워드를사용하여트랜잭션의끝을표시함 UPDATE CUSTOMER SET BALANCE = BALANCE - 100000 WHERE CUST_NAME = 정미림 ; UPDATE CUSTOMER SET BALANCE = BALANCE + 100000 WHERE CUST_NAME = 안명석 ; COMMIT; 74
9.4 Transact-SQL 의트랜잭션 ( 계속 ) 트랜잭션의속성 만일트랜잭션이데이터베이스를읽기만한다면트랜잭션이읽기전용임을 명시하여 DBMS 가동시성의정도를높일수있음 SET TRANSACTION READ ONLY; SELECT AVG(SALARY) FROM EMPLOYEE WHERE DNO= 3; 75
9.4 Transact-SQL 의트랜잭션 ( 계속 ) 트랜잭션의속성 ( 계속 ) 만일어떤트랜잭션이읽기전용이라고명시했으면그트랜잭션은어떠한갱신작업도수행할수없다. 예를들어아래와같은 SQL문은허용되지않음 SET TRANSACTION READ ONLY; UPDATE EMPLOYEE SET SALARY = SALARY * 1.06; 76
9.4 Transact-SQL 의트랜잭션 ( 계속 ) 트랜잭션의속성 ( 계속 ) 트랜잭션에대해 SET TRANSACTION READ WRITE를명시하면 SELECT, INSERT, DELETE, UPDATE문을모두수행할수있음 SET TRANSACTION READ WRITE; UPDATE EMPLOYEE SET SALARY = SALARY * 1.06; 77
9.4 Transact-SQL 의트랜잭션 ( 계속 ) 고립수준 SQL2에서사용자가동시성의정도를몇가지로구분하여명시할수있음 고립수준은한트랜잭션이다른트랜잭션과고립되어야하는정도를나타냄 고립수준이낮으면동시성은높아지지만데이터의정확성은떨어짐 고립수준이높으면데이터가정확해지지만동시성이저하됨 응용의성격에따라허용가능한고립수준 ( 데이터베이스의정확성 ) 을선택함으로써성능을향상시킬수있음 응용에서명시한고립수준에따라 DBMS가사용하는로킹동작이달라짐 한트랜잭션에대해명시한고립수준에따라그트랜잭션이읽을수있는데이터에만차이가있음 78
9.4 Transact-SQL 의트랜잭션 ( 계속 ) 상용 DBMS 에서제공하는몇가지고립수준 READ UNCOMMITTED 가장낮은고립수준 트랜잭션내의질의들이공유로크를걸지않고데이터를읽음 따라서오손데이터를읽을수있음 갱신하려는데이터에대해서는독점로크를걸고, 트랜잭션이끝날때까지보유함 SET TRANSACTION READ WRITE ISOLATION LEVEL READ UNCOMMITTED; 79
9.4 Transact-SQL 의트랜잭션 ( 계속 ) 상용 DBMS 에서제공하는몇가지고립수준 ( 계속 ) READ COMMITTED 트랜잭션내의질의들이읽으려는데이터에대해서공유로크를걸고, 읽기가끝나자마자로크를해제함 따라서동일한데이터를다시읽기위해공유로크를다시걸고데이터를읽으면, 이전에읽은값과다른값을읽는경우가생길수있음 갱신하려는데이터에대해서는독점로크를걸고, 트랜잭션이끝날때까지보유함 이고립수준은 Transact-SQL의디폴트 SET TRANSACTION READ WRITE ISOLATION LEVEL READ COMMITTED; 80
9.4 Transact-SQL 의트랜잭션 ( 계속 ) 상용 DBMS 에서제공하는몇가지고립수준 ( 계속 ) REPEATABLE READ 질의에서검색되는데이터에대해공유로크를걸고, 트랜잭션이끝날때까지보유함 한트랜잭션내에서동일한질의를두번이상수행할때매번같은값을포함한결과를검색하게됨 갱신하려는데이터에대해서는독점로크를걸고, 트랜잭션이끝날때까지보유함 SET TRANSACTION READ WRITE ISOLATION LEVEL REPEATABLE READ; 81
9.4 Transact-SQL 의트랜잭션 ( 계속 ) 상용 DBMS 에서제공하는몇가지고립수준 ( 계속 ) SERIALIZABLE 가장높은고립수준 질의에서검색되는투플들뿐만아니라인덱스에대해서도공유로크를걸고트랜잭션이끝날때까지보유함 갱신하려는데이터에대해서는독점로크를걸고트랜잭션이끝날때까지보유함 SERIALIZABLE은 SQL2의디폴트고립수준 SET TRANSACTION READ WRITE ISOLATION LEVEL SERIALIZABLE; 82
9.4 Transact-SQL 의트랜잭션 ( 계속 )9 83