9장. 트랜잭션 트랜잭션(transaction) 항공기 예약, 은행, 신용 카드 처리, 대형 할인점 등에서는 대규모

Slides:



Advertisements
Similar presentations
DB 후루룩 & ONE EYED JACK Collaboration_ ★. 다중 사용자 환경에서 둘 이상의 트랜잭션이 동시에 접속하여 해당 연산을 수행할 때, 문제 점이 전혀 발생하지 않도록 트랜잭션의 수행 을 적절히 제어해 주는 것을 말함. DBMS 예금 입출금 예금.
Advertisements

컴퓨터와 인터넷.
재료수치해석 HW # 박재혁.
제 19장 트랜잭션 처리를 위한 개념 경북대학교 컴퓨터과학과 박 영철.
9장. 트랜잭션 트랜잭션(transaction) 항공기 예약, 은행, 신용 카드 처리, 대형 할인점 등에서는 대규모
You YOungseok 데이터베이스 테이블 및 인덱스 You YOungseok.
MS-Access의 개요 1강 MOS Access 2003 CORE 학습내용 액세스 응용 프로그램은 유용한 데이터를
Entity Relationship Diagram
연결리스트(linked list).
컴퓨터 프로그래밍 기초 [Final] 기말고사
제 09 장 데이터베이스와 MySQL 학기 인터넷비즈니스과 강 환수 교수.
Fundamentals of Database Systems R. A. Elmasri and S. B. Navathe
12장 데이터 읽기 일관성과 락.
목차 백업과 복원.
Windows Server 장. 사고를 대비한 데이터 백업.
테이블 : 데이터베이스를 구성하는 요소로 같은 성격에 정보의 집합체. 레코드 : 하나의 정보를 가지고 있는 컬럼의 집합체
5장 Mysql 데이터베이스 한빛미디어(주).
Chapter 13 Wired LANs: Ethernet.
Fundamentals of Database Systems R. A. Elmasri and S. B. Navathe
3.2 SQL Server 설치 및 수행(계속) 시스템 데이터베이스 master
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
19장. 트랜잭션과 락(LOCK) 트랜잭션이란? MySQL의 트랜잭션 락(LOCK) 쉽게 배우는 MySQL 5.x
제 6장 트랜잭션 트랙잭션 동시성 제어 복구.
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
23장. 구조체와 사용자 정의 자료형 2.
18강. 데이터 베이스 - II JDBC 살펴보기 Statement객체 살펴보기 Lecturer Kim Myoung-Ho
17강. 데이터 베이스 - I 데이터 베이스의 개요 Oracle 설치 기본적인 SQL문 익히기
10 장 데이터 링크 제어(Data Link Control)
Sungkyunkwan University OS Project Dongkun Shin
제 19 장 (Oracle) 오라클에서 동시성 제어 (MVCC)
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
트랜잭션 처리(Transaction Processing)
5장 Mysql 데이터베이스 한빛미디어(주).
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
1장. 데이터베이스 자료의 조직적 집합체_데이터베이스 시스템의 이해
환경 설정 예제 데이터베이스 생성 - 그림 3.34의 SQL Server 관리 스튜디오 창의 왼쪽 영역의 데이터베
프로그래밍 개요
어서와 C언어는 처음이지 제14장.
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
27장. 모듈화 프로그래밍.
29강 JAVA 스레드 - 스레드란? - 멀티스레드 문법 - synchronized Lecturer Kim Myoung-Ho
2장. 데이터베이스 관리 시스템 데이터베이스 관리 시스템의 등장 배경 데이터베이스 관리 시스템의 정의
뇌를 자극하는 Windows Server 2012 R2
8장. spss statistics 20의 데이터 변환
10 장 데이터 링크 제어(Data Link Control)
10 장 데이터 링크 제어(Data Link Control)
데이터 베이스 DB2 관계형 데이터 모델 권준영.
CHAP 21. 전화, SMS, 주소록.
과제 1 4bit x 4 SRAM이 있다 아래 (1), (2) 두 입력에 대한 출력값 [3:0] Dout을 나타내시오 (1)
01. 개요 네트워크에 있는 컴퓨터와 그룹에 대한 NetBIOS 이름에 대응되는 IP 주소를 찾아주는 서비스
문성우 SQL 실습 Part Ⅰ 문성우.
AT MEGA 128 기초와 응용 I 기본적인 구조.
제 18 장 (Oracle) 오라클에서 트랜잭션 지원
오라클 11g 보안.
14 뷰(View) 뷰의 개념 뷰 관리.
Chapter 10 데이터 검색1.
멀티미디어시스템 제 5 장. 멀티미디어 데이터베이스 개념 IT응용시스템공학과 김 형 진 교수.
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
제 4 장 Record.
10주 MariaDB에서 트랜잭션 지원 및 동시성 제어 기능
Mariadb 트랜잭션과 동시성 제어 장종원
 6장. SQL 쿼리.
                              데이터베이스 설계 및 실습 #6 - SQL 실습 한국외국어대학교 DaPS 연구실                              
임시테이블과 테이블변수 SQLWorld Study Group - 최명환 -.
교착 상태 해결 : 교착 상태 탐지 교착 상태 탐지(Deadlock Detection)
7 생성자 함수.
6 객체.
ARP.
BoardGame 보드게임 따라가기.
Presentation transcript:

9장. 트랜잭션 트랜잭션(transaction) 항공기 예약, 은행, 신용 카드 처리, 대형 할인점 등에서는 대규모 데이터베이스를 수백, 수천 명 이상의 사용자들이 동시에 접근함 많은 사용자들이 동시에 데이터베이스의 서로 다른 부분 또는 동일한 부분을 접근하면서 데이터베이스를 사용함 동시성 제어(concurrency control) 동시에 수행되는 트랜잭션들이 데이터베이스에 미치는 영향은 이들을 순차적으로 수행하였을 때 데이터베이스에 미치는 영향과 같도록 보장함 다수 사용자가 데이터베이스를 동시에 접근하도록 허용하면서 데이터베이스의 일관성을 유지함 9장. 트랜잭션

9장. 트랜잭션(계속) 트랜잭션(transaction)(계속) 회복(recovery) 데이터베이스를 갱신하는 도중에 시스템이 고장 나도 데이터베이스의 일관성을 유지함 9장. 트랜잭션

9.1 트랜잭션 개요 데이터베이스 시스템 환경에서 흔히 볼 수 있는 몇 가지 응용의 예 이때 500명 전원의 급여가 수정되거나 한 명의 급여도 갱신되지 않도록 DBMS가 보장해야 함 그림 9.1과 같이 320번째 사원까지 수정한 상태에서 컴퓨터 시스템이 다운된 후에 재기동되었을 때 DBMS는 어떻게 대응해야 하는가? DBMS가 추가로 정보를 유지하지 않는다면 DBMS가 재기동된 후에 어느 직원의 투플까지 수정되었는가를 알 수 없음 – 로그(log) 유지 9장. 트랜잭션

9.1 트랜잭션 개요(계속) 9장. 트랜잭션

9.1 트랜잭션 개요(계속) 데이터베이스 시스템 환경에서 흔히 볼 수 있는 몇 가지 응용의 예(계속) 9장. 트랜잭션

9.1 트랜잭션 개요(계속) 두 개의 UPDATE문을 사용하여, 하나의 UPDATE문에서는 정미림의 잔액을 100,000원 감소시키고, 또 다른 UPDATE문에서는 안명석의 잔액을 100,000원 증가시킴 첫 번째 UPDATE문을 수행한 후에 두 번째 UPDATE문을 수행하기 전에 컴퓨터 시스템이 다운되면 재기동한 후에 DBMS가 어떻게 대응해야 하는가? 위의 두 개의 UPDATE문은 둘 다 완전하게 수행되거나 한 UPDATE 문도 수행되어서는 안되도록, 즉 하나의 트랜잭션(단위)처럼 DBMS가 보장해야 함 기본적으로 각각의 SQL문이 하나의 트랜잭션으로 취급됨 두 개 이상의 SQL문들을 하나의 트랜잭션으로 취급하려면 사용자가 이를 명시적으로 표시해야 함 9장. 트랜잭션

9.1 트랜잭션 개요(계속) 데이터베이스 시스템 환경에서 흔히 볼 수 있는 몇 가지 응용의 예(계속) 9장. 트랜잭션

9.1 트랜잭션 개요(계속) 9장. 트랜잭션

9.1 트랜잭션 개요(계속) 만일 SQL문 (2)를 수행하고 SQL문 (3)을 수행하기 전에 컴퓨터 시스템이 다운되고 재기동한 후에 DBMS가 어떻게 대응해야 하는가? 위의 세 개의 SQL문이 모두 완전하게 수행되거나 하나도 수행되어서는 안되도록, 즉 하나의 트랜잭션(단위)처럼 DBMS가 취급해야 함 DBMS는 각 SQL문의 의미를 알 수 없으므로 하나의 트랜잭션으로 취급해야 하는 SQL문들의 범위를 사용자가 명시적으로 표시해야 함 9장. 트랜잭션

9.1 트랜잭션 개요(계속) 트랜잭션의 특성(ACID 특성) 원자성(Atomicity) 한 트랜잭션 내의 모든 연산들이 완전히 수행되거나 전혀 수행되지 않음(all or nothing)을 의미 DBMS의 회복 모듈은 시스템이 다운되는 경우에, 부분적으로 데이터베이스를 갱신한 트랜잭션의 영향을 취소함으로써 트랜잭션의 원자성을 보장함 완료된 트랜잭션이 갱신한 사항은 트랜잭션의 영향을 재수행함으로써 트랜잭션의 원자성을 보장함 9장. 트랜잭션

9.1 트랜잭션 개요(계속) 트랜잭션의 특성(ACID 특성)(계속) 일관성(Consistency) 어떤 트랜잭션이 수행되기 전에 데이터베이스가 일관된 상태를 가졌다면 트랜잭션이 수행된 후에 데이터베이스는 또 다른 일관된 상태를 가짐 트랜잭션이 수행되는 도중에는 데이터베이스가 일시적으로 일관된 상태를 갖지 않을 수 있음 9장. 트랜잭션

9.1 트랜잭션 개요(계속) 9장. 트랜잭션

9.1 트랜잭션 개요(계속) 트랜잭션의 특성(ACID 특성)(계속) 고립성(Isolation) 한 트랜잭션이 데이터를 갱신하는 동안 이 트랜잭션이 완료되기 전에는 갱신 중인 데이터를 다른 트랜잭션들이 접근하지 못하도록 해야 함 다수의 트랜잭션들이 동시에 수행되더라도 그 결과는 어떤 순서에 따라 트랜잭션들을 하나씩 차례대로 수행한 결과와 같아야 함 DBMS의 동시성 제어 모듈이 트랜잭션의 고립성을 보장함 DBMS는 응용들의 요구사항에 따라 다양한 고립 수준(isolation level)을 제공함 9장. 트랜잭션

9.1 트랜잭션 개요(계속) 트랜잭션의 특성(ACID 특성)(계속) 지속성(Durability) 일단 한 트랜잭션이 완료되면 이 트랜잭션이 갱신한 것은 그 후에 시스템에 고장이 발생하더라도 손실되지 않음 완료된 트랜잭션의 효과는 시스템이 고장난 경우에도 데이터베이스에 반영됨 DBMS의 회복 모듈은 시스템이 다운되는 경우에도 트랜잭션의 지속성을 보장함 9장. 트랜잭션

9.1 트랜잭션 개요(계속) 9장. 트랜잭션

9.1 트랜잭션 개요(계속) 트랜잭션의 완료(commit) 트랜잭션의 철회(abort) 트랜잭션에서 변경하려는 내용이 데이터베이스에 완전하게 반영됨 SQL 구문상으로 COMMIT WORK 트랜잭션의 철회(abort) 트랜잭션에서 변경하려는 내용이 데이터베이스에 일부만 반영된 경우에는 원자성을 보장하기 위해서, 트랜잭션이 갱신한 사항을 트랜잭션이 수행되기 전의 상태로 되돌림 SQL 구문상으로 ROLLBACK WORK 9장. 트랜잭션

9.1 트랜잭션 개요(계속) 9장. 트랜잭션

9.1 트랜잭션 개요(계속) 9장. 트랜잭션

9.1 트랜잭션 개요(계속) 트랜잭션이 성공하지 못하는 원인 시스템(사이트) 고장 중앙 처리 장치, 주기억 장치, 전원 공급 장치 등이 고장남 트랜잭션 고장 트랜잭션 고장은 트랜잭션이 수행되는 도중에 철회됨 매체 고장 디스크 헤드, 디스크 콘트롤러 등이 고장 나서 보조 기억 장치의 전부 또는 일부 내용이 지워짐 통신 고장 자연적 재해 부주의 또는 고의적인 고장 9장. 트랜잭션

9.2 동시성 제어 동시성 제어 대부분의 DBMS들은 다수 사용자용 여러 사용자들이 동시에 동일한 테이블을 접근하기도 함 동시성 제어 기법은 여러 사용자들이 다수의 트랜잭션들을 동시에 수행하는 환경에서 부정확한 결과를 생성할 수 있는, 트랜잭션들 간의 간섭이 생기지 않도록 함 9장. 트랜잭션

9.2 동시성 제어 9장. 트랜잭션

9.2 동시성 제어 직렬 스케줄(serial schedule) 비직렬 스케줄(non-serial schedule) 여러 트랜잭션들의 집합을 한 번에 한 트랜잭션씩 차례대로 수행함 비직렬 스케줄(non-serial schedule) 여러 트랜잭션들을 동시에 수행함 직렬가능(serializable) 비직렬 스케줄의 결과가 어떤 직렬 스케줄의 수행 결과와 동등함 9장. 트랜잭션

9.2 동시성 제어(계속) 데이터베이스 연산 Input(X) 연산은 데이터베이스 항목 X를 포함하고 있는 블록을 주기억 장치의 버퍼로 읽어들임 Output(X) 연산은 데이터베이스 항목 X를 포함하고 있는 블록을 디스크에 기록함 read_item(X) 연산은 주기억 장치 버퍼에서 데이터베이스 항목 X의 값을 프로그램 변수 X로 복사함 write_item(X) 연산은 프로그램 변수 X의 값을 주기억 장치 내의 데이터베이스 항목 X에 기록함 9장. 트랜잭션

9.2 동시성 제어(계속) 9장. 트랜잭션

9.2 동시성 제어(계속) 동시성 제어를 하지 않고 다수의 트랜잭션을 동시에 수행할 때 생길 수 있는 문제 갱신 손실(lost update): 수행 중인 트랜잭션이 갱신한 내용을 다른 트랜잭션이 덮어 씀으로써 갱신이 무효가 되는 것 오손 데이터 읽기(dirty read): 완료되지 않은 트랜잭션이 갱신한 데이터를 읽는 것 반복할 수 없는 읽기(unrepeatable read): 한 트랜잭션이 동일한 데이터를 두 번 읽을 때 서로 다른 값을 읽는 것 9장. 트랜잭션

9.2 동시성 제어(계속) 예: 갱신 손실 하나의 SQL문은 DBMS 내에서 여러 개의 명령들로 나뉘어 수행된다. 다수 사용자 환경에서는 여러 사용자들이 동시에 요청한 트랜잭션의 명령들이 섞여서 수행될 수 있다. 트랜잭션 T1은 X에서 Y로 100000을 이체하고, 트랜잭션 T2는 X의 값에 50000을 더하려고 한다. 두 트랜잭션이 수행되기 전의 X와 Y의 초기값이 각각 300000과 600000이라고 가정하면 T1의 수행을 먼저 완료하고 T2의 수행을 완료하던지, T2의 수행을 먼저 완료하고 T1의 수행을 완료하던지 관계 없이 X의 최종값은 250000, Y의 최종값은 700000이 되어야 한다. 9장. 트랜잭션

9.2 동시성 제어(계속) 9장. 트랜잭션

9.2 동시성 제어(계속) 예: 오손 데이터 읽기 그림 9.8에서 트랜잭션 T1이 정미림의 잔액을 100000원 감소시킨 후에 트랜잭션 T2는 모든 계좌의 잔액의 평균값을 검색하였다. 그 이후에 T1이 어떤 이유로 철회되면 T1이 갱신한 정미림 계좌의 잔액은 원래 상태로 되돌아간다. 따라서 T2는 완료되지 않은 트랜잭션이 갱신한 데이터, 즉 틀린 데이터를 읽었다. 9장. 트랜잭션

9.2 동시성 제어(계속) 9장. 트랜잭션

9.2 동시성 제어(계속) 예: 반복할 수 없는 읽기 그림 9.9에서 먼저 트랜잭션 T2는 모든 계좌의 잔액의 평균값을 검색하였다. 트랜잭션 T2가 완료되기 전에 트랜잭션 T1이 정미림의 잔액을 100000원 감소시키고 완료되었다. 트랜잭션 T2가 다시 모든 계좌의 잔액의 평균값을 검색하면 첫 번째 평균값과 다른 값을 보게 된다. 동일한 읽기 연산을 여러 번 수행할 때 매번 서로 다른 값을 보게 될 수 있다. 9장. 트랜잭션

9.2 동시성 제어(계속) 9장. 트랜잭션

9.2 동시성 제어(계속) 9.1절의 항공기 예약 트랜잭션 여러 여행사에서 동시에 고객들의 요청에 따라 동일한 날짜에 출발하는 항공기의 빈 좌석 유무를 검사할 수 있음 그림 9.10의 순서와 같이 만일 두 여행사에서 각각 트랜잭션을 수행하는 과정에 SQL문 (1)의 수행 결과로 특정 항공기에 빈 좌석이 1개 남아 있다는 사실을 확인하고 동시에 SQL문 (2)와 (3)을 수행하여 팔린 좌석수를 1만큼씩 증가시키고 자신의 고객의 정보를 항공사 데이터베이스에 입력하려 할 때 DBMS가 아무런 조치를 취하지 않으면, 1개 남은 좌석에 두 명의 고객이 배정되는 결과를 초래하게 됨 9장. 트랜잭션

9.2 동시성 제어(계속) 9장. 트랜잭션

9.2 동시성 제어(계속) 로킹(locking) 데이터 항목을 로킹하는 개념은 동시에 수행되는 트랜잭션들의 동시성을 제어하기 위해서 가장 널리 사용되는 기법 로크(lock)는 데이터베이스 내의 각 데이터 항목과 연관된 하나의 변수 각 트랜잭션이 수행을 시작하여 데이터 항목을 접근할 때마다 요청한 로크에 관한 정보는 로크 테이블(lock table) 등에 유지됨 트랜잭션에서 갱신을 목적으로 데이터 항목을 접근할 때는 독점 로크(X-lock, eXclusive lock)를 요청함 트랜잭션에서 읽을 목적으로 데이터 항목을 접근할 때는 공유 로크(S-lock, Shared lock)를 요청함 트랜잭션이 데이터 항목에 대한 접근을 끝낸 후에 로크를 해제(unlock)함 9장. 트랜잭션

9.2 동시성 제어(계속) 9장. 트랜잭션

9.2 동시성 제어(계속) 2단계 로킹 프로토콜(2-phase locking protocol) 로크를 요청하는 것과 로크를 해제하는 것이 2단계로 이루어짐 로크 확장 단계가 지난 후에 로크 수축 단계에 들어감 일단 로크를 한 개라도 해제하면 로크 수축 단계에 들어감 9장. 트랜잭션

9.2 동시성 제어(계속) 9장. 트랜잭션

9.2 동시성 제어(계속) 2단계 로킹 프로토콜(계속) 로크 확장 단계(1단계) 로크 확장 단계에서는 트랜잭션이 데이터 항목에 대하여 새로운 로크를 요청할 수 있지만 보유하고 있던 로크를 하나라도 해제할 수 없음 로크 수축 단계(2단계) 로크 수축 단계에서는 보유하고 있던 로크를 해제할 수 있지만 새로운 로크를 요청할 수 없음 로크 수축 단계에서는 로크를 조금씩 해제할 수도 있고(그림 9.12), 트랜잭션이 완료 시점에 이르렀을 때 한꺼번에 모든 로크를 해제할 수도 있음(그림 9.13) 일반적으로 한꺼번에 해제하는 방식이 사용됨 로크 포인트(lock point)는 한 트랜잭션에서 필요로 하는 모든 로크를 걸어놓은 시점 9장. 트랜잭션

9.2 동시성 제어(계속) 9장. 트랜잭션

9.2 동시성 제어(계속) 데드록(deadlock) 2단계 로킹 프로토콜에서는 데드록이 발생할 수 있음 데드록은 두 개 이상의 트랜잭션들이 서로 상대방이 보유하고 있는 로크를 요청하면서 기다리고 있는 상태를 말함 데드록을 해결하기 위해서는 데드록을 방지하는 기법이나, 데드록을 탐지하고 희생자를 선정하여 데드록을 푸는 기법 등을 사용함 9장. 트랜잭션

9.2 동시성 제어(계속) 데드록(계속) ① T1이 X에 대해 독점 로크를 요청하여 허가받음 ② T2이 Y에 대해 독점 로크를 요청하여 허가받음 ③ T1이 Y에 대해 공유 로크나 독점 로크를 요청하면 로크가 해제될 때까지 기다리게 됨 ④ T2가 X에 대해 공유 로크나 독점 로크를 요청하면 로크가 해제될 때까지 기다리게 됨 9장. 트랜잭션

9.2 동시성 제어(계속) 다중 로크 단위(multiple granularity) 대부분의 트랜잭션들이 소수의 투플들을 접근하는 데이터베이스 응용에서는 투플 단위로 로크를 해도 로크 테이블을 다루는 시간이 오래 걸리지 않음 트랜잭션들이 많은 투플을 접근하는 데이터베이스 응용에서 투플 단위로만 로크를 한다면 로크 테이블에서 로크 충돌을 검사하고, 로크 정보를 기록하는 시간이 오래 걸림 트랜잭션이 접근하는 투플의 수에 따라 로크를 하는 데이터 항목의 단위를 구분하는 것이 필요함 한 트랜잭션에서 로크할 수 있는 데이터 항목이 두 가지 이상 있으면 다중 로크 단위라고 말함 데이터베이스에서 로크할 수 있는 단위로는 데이터베이스, 릴레이션, 디스크 블록, 투플 등 9장. 트랜잭션

9.2 동시성 제어(계속) 다중 로크 단위(계속) 일반적으로 DBMS는 각 트랜잭션에서 접근하는 투플 수에 따라 자동적으로 로크 단위를 조정함 로크 단위가 작을수록 로킹에 따른 오버헤드가 증가함 로크 단위가 작을수록 동시성의 정도는 증가함 9장. 트랜잭션

9.2 동시성 제어(계속) 9장. 트랜잭션

9.2 동시성 제어(계속) 예: 다중 단위 로크 EMPLOYEE 릴레이션에 속하는 디스크 블록 b1에 다섯 개의 투플 t1, t2, t3, t4, t5가 있다고 가정하자. 또한 트랜잭션 T1은 이 중에서 투플 t1과 t4를 갱신하고, 트랜잭션 T2는 투플 t2를 검색한다고 가정하자. 만일 로크 단위가 투플이라면 두 트랜잭션이 접근하는 투플들이 서로 상이하므로 해당 투플에 로크를 걸고 두 트랜잭션이 동시에 수행될 수 있다. 9장. 트랜잭션

9.2 동시성 제어(계속) 예: 다중 단위 로크 트랜잭션 T1은 블록 단위, T2는 투플 단위로 로크를 하는 경우에, 먼저 T1이 블록 b1에 대해 독점 로크를 요청하여 허가를 받으면 이 블록에 들어 있는 투플 다섯 개에도 모두 독점 로크가 걸린다. 그 다음에 트랜잭션 T2가 투플 t2에 대해 공유 로크를 요청하면 트랜잭션 T1이 로크를 풀 때까지 기다려야 한다. 9장. 트랜잭션

9.3 회복 회복의 필요성 어떤 트랜잭션 T를 수행하는 도중에 시스템이 다운되었을 때, T의 수행 효과가 디스크의 데이터베이스에 일부 반영되었을 수 있음 어떻게 T의 수행을 취소하여 원자성을 보장할 것인가? 또한 트랜잭션 T가 완료된 직후에 시스템이 다운되면 T의 모든 갱신 효과가 주기억 장치로부터 디스크에 기록되지 않았을 수 있음 어떻게 T의 수행 결과가 데이터베이스에 완전하게 반영되도록 하여 지속성을 보장할 것인가? 디스크의 헤드 등이 고장 나서 디스크의 데이터베이스를 접근할 수 없다면 어떻게 할 것인가? 9장. 트랜잭션

9.3 회복(계속) 회복의 개요 여러 응용이 주기억 장치 버퍼 내의 동일한 데이터베이스 항목을 갱신한 후에 디스크에 기록함으로써 성능을 향상시키는 것이 중요함 버퍼의 내용을 디스크에 기록하는 것을 가능하면 최대한 줄이는 것이 일반적 예: 버퍼가 꽉 찼을 때 또는 트랜잭션이 완료될 때 버퍼의 내용이 디스크에 기록될 수 있음 트랜잭션이 버퍼에는 갱신 사항을 반영했지만 버퍼의 내용이 디스크에 기록되기 전에 고장이 발생할 수 있음 9장. 트랜잭션

9.3 회복(계속) 회복의 개요(계속) 고장이 발생하기 전에 트랜잭션이 완료 명령을 수행했다면 회복 모듈은 이 트랜잭션의 갱신 사항을 재수행(REDO)하여 트랜잭션의 갱신이 지속성을 갖도록 해야 함 고장이 발생하기 전에 트랜잭션이 완료 명령을 수행하지 못했다면 원자성을 보장하기 위해서 이 트랜잭션이 데이터베이스에 반영했을 가능성이 있는 갱신 사항을 취소(UNDO)해야 함 9장. 트랜잭션

9.3 회복(계속) 저장 장치의 유형 주기억 장치와 같은 휘발성 저장 장치에 들어 있는 내용은 시스템이 다운된 후에 모두 사라짐 디스크와 같은 비휘발성 저장 장치에 들어 있는 내용은 디스크 헤드 등이 손상을 입지 않는 한 시스템이 다운된 후에도 유지됨 안전 저장 장치(stable storage)는 모든 유형의 고장을 견딜 수 있는 저장 장치를 의미 두 개 이상의 비휘발성 저장 장치가 동시에 고장날 가능성이 매우 낮으므로 비휘발성 저장 장치에 두 개 이상의 사본을 중복해서 저장함으로써 안전 저장 장치를 구현함 9장. 트랜잭션

9.3 회복(계속) 재해적 고장과 비재해적 고장 재해적 고장 디스크가 손상을 입어서 데이터베이스를 읽을 수 없는 고장 재해적 고장으로부터의 회복은 데이터베이스를 백업해 놓은 자기 테이프를 기반으로 함 비재해적 고장 그 이외의 고장 대부분의 회복 알고리즘들은 비재해적 고장에 적용됨 로그를 기반으로 한 즉시 갱신, 로그를 기반으로 한 지연 갱신, 그림자 페이징(shadow paging) 등 여러 알고리즘 대부분의 상용 DBMS에서 로그를 기반으로 한 즉시 갱신 방식을 사용 9장. 트랜잭션

9.3 회복(계속) 로그를 사용한 즉시 갱신 즉시 갱신에서는 트랜잭션이 데이터베이스를 갱신한 사항이 주기억 장치의 버퍼에 유지되다가 트랜잭션이 완료되기 전이라도 디스크의 데이터베이스에 기록될 수 있음 데이터베이스에는 완료된 트랜잭션의 수행 결과뿐만 아니라 철회된 트랜잭션의 수행 결과도 반영될 수 있음 트랜잭션의 원자성과 지속성을 보장하기 위해 DBMS는 로그라고 부르는 특별한 화일을 유지함 데이터베이스의 항목에 영향을 미치는 모든 트랜잭션의 연산들에 대해서 로그 레코드를 기록함 각 로그 레코드는 로그 순서 번호(LSN: Log Sequence Number)로 식별됨 9장. 트랜잭션

9.3 회복(계속) 9장. 트랜잭션

9.3 회복(계속) 로그를 사용한 즉시 갱신(계속) 주기억 장치 내의 로그 버퍼에 로그 레코드들을 기록하고 로그 버퍼가 꽉 찰 때 디스크에 기록함 로그는 데이터베이스 회복에 필수적이므로 일반적으로 안전 저장 장치에 저장됨 이중 로그(dual logging): 로그를 두 개의 디스크에 중복해서 저장하는 것 각 로그 레코드가 어떤 트랜잭션에 속한 것인가를 식별하기 위해서 각 로그 레코드마다 트랜잭션 ID를 포함시킴 동일한 트랜잭션에 속하는 로그 레코드들은 연결 리스트로 유지됨 9장. 트랜잭션

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를 갖는 트랜잭션이 철회되었음을 나타내는 로그 레코드 9장. 트랜잭션

9.3 회복(계속) 9장. 트랜잭션

9.3 회복(계속) 9장. 트랜잭션

9.3 회복(계속) 트랜잭션의 완료점(commit point) 한 트랜잭션의 데이터베이스 갱신 연산이 모두 끝나고 데이터베이스 갱신 사항이 로그에 기록되었을 때 DBMS의 회복 모듈은 로그를 검사하여 로그에 [Trans-ID, start] 로그 레코드와 [Trans-ID, commit] 로그 레코드가 모두 존재하는 트랜잭션들은 재수행 [Trans-ID, start] 로그 레코드는 로그에 존재하지만 [Trans-ID, commit] 로그 레코드가 존재하지 않는 트랜잭션들은 취소 9장. 트랜잭션

9.3 회복(계속) 9장. 트랜잭션

9.3 회복(계속) 9장. 트랜잭션

9.3 회복(계속) 9장. 트랜잭션

9.3 회복(계속) 로그 먼저 쓰기(WAL: Write-Ahead Logging) 트랜잭션이 데이터베이스를 갱신하면 주기억 장치의 데이터베이스 버퍼에 갱신 사항을 기록하고, 로그 버퍼에는 이에 대응되는 로그 레코드를 기록함 만일 데이터베이스 버퍼가 로그 버퍼보다 먼저 디스크에 기록되는 경우에는 로그 버퍼가 디스크에 기록되기 전에 시스템이 다운되었다가 재기동되었을 때 주기억 장치는 휘발성이므로 데이터베이스 버퍼와 로그 버퍼의 내용은 전혀 남아 있지 않음 로그 레코드가 없어서 이전값을 알 수 없으므로 트랜잭션의 취소가 불가능함 따라서 데이터베이스 버퍼보다 로그 버퍼를 먼저 디스크에 기록해야 함 9장. 트랜잭션

9.3 회복(계속) 체크포인트(checkpoint) 시스템이 다운된 시점으로부터 오래 전에 완료된 트랜잭션들이 데이터베이스를 갱신한 사항은 이미 디스크에 반영되었을 가능성이 큼 DBMS가 로그를 사용하더라도 어떤 트랜잭션의 갱신 사항이 주기억 장치 버퍼로부터 디스크에 기록되었는가를 구분할 수 없음 따라서 DBMS는 회복시 재수행할 트랜잭션의 수를 줄이기 위해서 주기적으로 체크포인트를 수행함 체크포인트 시점에는 주기억 장치의 버퍼 내용이 디스크에 강제로 기록되므로, 체크포인트를 수행하면 디스크 상에서 로그와 데이터베이스의 내용이 일치하게 됨 체크포인트 작업이 끝나면 로그에 [checkpoint] 로그 레코드가 기록됨 일반적으로 체크포인트를 10~20분마다 한 번씩 수행함 9장. 트랜잭션

9.3 회복(계속) 체크포인트를 할 때 수행되는 작업 수행 중인 트랜잭션들을 일시적으로 중지시킴. 회복 알고리즘에 따라서는 이 작업이 필요하지 않을 수 있음 주기억 장치의 로그 버퍼를 디스크에 강제로 출력 주기억 장치의 데이터베이스 버퍼를 디스크에 강제로 출력 [checkpoint] 로그 레코드를 로그 버퍼에 기록한 후 디스크에 강제로 출력 체크포인트 시점에 수행 중이던 트랜잭션들의 ID도 [checkpoint] 로그 레코드에 함께 기록 일시적으로 중지된 트랜잭션의 수행을 재개 9장. 트랜잭션

9.3 회복(계속) 예: 체크포인트를 하지 않았을 때 그림 9.19는 시스템이 다운된 후에 재기동되었을 때 회복 모듈이 디스크에 저장되어 있는 로그 레코드를 조사하여 얻은 것. 트랜잭션 T0, T1, T3, T4, T5는 재수행. 트랜잭션 T2, T6은 취소. 9장. 트랜잭션

9.3 회복(계속) 예: 체크포인트를 했을 때 그림 9.20도 디스크에 저장되어 있는 로그 레코드를 조사하여 얻은 것. 트랜잭션 T0, T1, T3은 무시. 트랜잭션 T4, T5는 재수행. 트랜잭션 T2, T6은 취소. 9장. 트랜잭션

9.3 회복(계속) 데이터베이스 백업과 재해적 고장으로부터의 회복 아주 드물지만, 데이터베이스가 저장되어 있는 디스크의 헤드 등이 고장나서 데이터베이스를 읽을 수 없는 경우가 발생함 이런 경우에 데이터베이스를 회복하는 한 가지 방법은 주기적으로 자기 테이프에 전체 데이터베이스와 로그를 백업하고, 자기 테이프를 별도의 공간에 안전하게 보관하는 것 전체 데이터베이스를 백업하는 것은 시간이 매우 오래 걸리는 작업 사용자들에게 데이터베이스 사용을 계속 허용하면서, 지난 번 백업 이후에 갱신된 내용만 백업을 하는 점진적인 백업(incremental backup)이 바람직 9장. 트랜잭션

9.4 Transact-SQL의 트랜잭션 Transact-SQL의 트랜잭션 트랜잭션의 시작과 끝 사용자나 응용 프로그램은 트랜잭션 시작과 끝을 명시하여 트랜잭션을 제어함 한 트랜잭션은 임의의 SQL문으로 시작되거나, 트랜잭션의 시작을 표시하는 명시적인 키워드를 사용하여 시작됨 BEGIN TRANSACTION이 트랜잭션의 시작을 명시적으로 표시하기 위해 사용됨 한 트랜잭션의 끝을 표시하기 위해서 사용자는 COMMIT 또는 ROLLBACK문을 입력함 사용자가 정의한 트랜잭션 이름이 허용되는 것을 제외하면 COMMIT TRANSACTION문은 COMMIT WORK와 동일한 기능을 가짐 9장. 트랜잭션

9.4 Transact-SQL의 트랜잭션(계속) 예: 트랜잭션의 시작을 명시적인 키워드로 나타내지 않고, 두 개의 UPDATE문으로 이루어진 트랜잭션을 명시하였다. COMMIT 키워드를 사용하여 트랜잭션의 끝을 표시함 UPDATE CUSTOMER SET BALANCE = BALANCE - 100000 WHERE CUST_NAME = ‘정미림’; SET BALANCE = BALANCE + 100000 WHERE CUST_NAME = ‘안명석’; COMMIT; 9장. 트랜잭션

9.4 Transact-SQL의 트랜잭션(계속) 트랜잭션의 속성 만일 트랜잭션이 데이터베이스를 읽기만 한다면 트랜잭션이 읽기 전용임을 명시하여 DBMS가 동시성의 정도를 높일 수 있음 SET TRANSACTION READ ONLY; SELECT AVG(SALARY) FROM EMPLOYEE WHERE DNO= 3; 9장. 트랜잭션

9.4 Transact-SQL의 트랜잭션(계속) 트랜잭션의 속성(계속) 만일 어떤 트랜잭션이 읽기 전용이라고 명시했으면 그 트랜잭션은 어떠한 갱신 작업도 수행할 수 없다. 예를 들어 아래와 같은 SQL문은 허용되지 않음 SET TRANSACTION READ ONLY; UPDATE EMPLOYEE SET SALARY = SALARY * 1.06; 9장. 트랜잭션

9.4 Transact-SQL의 트랜잭션(계속) 트랜잭션의 속성(계속) 트랜잭션에 대해 SET TRANSACTION READ WRITE를 명시하면 SELECT, INSERT, DELETE, UPDATE문을 모두 수행할 수 있음 SET TRANSACTION READ WRITE; UPDATE EMPLOYEE SET SALARY = SALARY * 1.06; 9장. 트랜잭션

9.4 Transact-SQL의 트랜잭션(계속) 고립 수준 SQL2에서 사용자가 동시성의 정도를 몇 가지로 구분하여 명시할 수 있음 고립 수준은 한 트랜잭션이 다른 트랜잭션과 고립되어야 하는 정도를 나타냄 고립 수준이 낮으면 동시성은 높아지지만 데이터의 정확성은 떨어짐 고립 수준이 높으면 데이터가 정확해지지만 동시성이 저하됨 응용의 성격에 따라 허용 가능한 고립 수준(데이터베이스의 정확성)을 선택함으로써 성능을 향상시킬 수 있음 응용에서 명시한 고립 수준에 따라 DBMS가 사용하는 로킹 동작이 달라짐 한 트랜잭션에 대해 명시한 고립 수준에 따라 그 트랜잭션이 읽을 수 있는 데이터에만 차이가 있음 9장. 트랜잭션

9.4 Transact-SQL의 트랜잭션(계속) 상용 DBMS에서 제공하는 몇 가지 고립 수준 READ UNCOMMITTED 가장 낮은 고립 수준 트랜잭션 내의 질의들이 공유 로크를 걸지 않고 데이터를 읽음 따라서 오손 데이터를 읽을 수 있음 갱신하려는 데이터에 대해서는 독점 로크를 걸고, 트랜잭션이 끝날 때까지 보유함 SET TRANSACTION READ WRITE ISOLATION LEVEL READ UNCOMMITTED; 9장. 트랜잭션

9.4 Transact-SQL의 트랜잭션(계속) 상용 DBMS에서 제공하는 몇 가지 고립 수준(계속) READ COMMITTED 트랜잭션 내의 질의들이 읽으려는 데이터에 대해서 공유 로크를 걸고, 읽기가 끝나자마자 로크를 해제함 따라서 동일한 데이터를 다시 읽기 위해 공유 로크를 다시 걸고 데이터를 읽으면, 이전에 읽은 값과 다른 값을 읽는 경우가 생길 수 있음 갱신하려는 데이터에 대해서는 독점 로크를 걸고, 트랜잭션이 끝날 때까지 보유함 이 고립 수준은 Transact-SQL의 디폴트 SET TRANSACTION READ WRITE ISOLATION LEVEL READ COMMITTED; 9장. 트랜잭션

9.4 Transact-SQL의 트랜잭션(계속) 상용 DBMS에서 제공하는 몇 가지 고립 수준(계속) REPEATABLE READ 질의에서 검색되는 데이터에 대해 공유 로크를 걸고, 트랜잭션이 끝날 때까지 보유함 한 트랜잭션 내에서 동일한 질의를 두 번 이상 수행할 때 매번 같은 값을 포함한 결과를 검색하게 됨 갱신하려는 데이터에 대해서는 독점 로크를 걸고, 트랜잭션이 끝날 때까지 보유함 SET TRANSACTION READ WRITE ISOLATION LEVEL REPEATABLE READ; 9장. 트랜잭션

9.4 Transact-SQL의 트랜잭션(계속) 상용 DBMS에서 제공하는 몇 가지 고립 수준(계속) SERIALIZABLE 가장 높은 고립 수준 질의에서 검색되는 투플들 뿐만 아니라 인덱스에 대해서도 공유 로크를 걸고 트랜잭션이 끝날 때까지 보유함 갱신하려는 데이터에 대해서는 독점 로크를 걸고 트랜잭션이 끝날 때까지 보유함 SERIALIZABLE은 SQL2의 디폴트 고립 수준 SET TRANSACTION READ WRITE ISOLATION LEVEL SERIALIZABLE; 9장. 트랜잭션

9.4 Transact-SQL의 트랜잭션(계속)9 9장. 트랜잭션