10장. 회복과 병행 제어 트랜잭션 장애와 회복 병행 제어
학습목표 병행 제어와 회복 작업의 기본 단위인 트랜잭션의 개념을 이해한다. 데이터베이스를 장애로부터 복구하는 다양한 회복 기법을 익힌다. 여러 사용자가 동시에 접근할 수 있도록 트랜잭션 수행을 통제하는 병행 제어 기법을 익힌다.
01 트랜잭션 트랜잭션(transaction)의 개념 데이터베이스 관리시스템의 기능 하나의 작업을 수행하기 위해 필요한 데이터베이스 연산들을 모아놓은 것으로 데이터베이스의에서 논리적인 작업의 단위 또는 장애가 발생했을 때 데이터를 복구하는 작업 단위 작업 수행에 필요한 SQL 문들의 모임 특히, 데이터베이스를 변경하는 INSERT, DELETE, UPDATE 문의 실행을 관리 데이터베이스 관리시스템의 기능 - 다수 사용자가 동시에 사용하더라도 항상 모순 없는 정확한 데이터를 유지하는 기능 제공 - 장애가 발생하더라도 빠른 시간 내에 원래의 상태로 복구 할 수 있는 기능 제공 - 항상 정확하고 일관된 상태를 유지할 수 있는 기능 제공 등 ☞ DBMS 기능의 중심에는 트랜잭션이 있다.
처리 순서는 중요하지 않지만 두 개의 UPDATE 문이 모두 정상적으로 실행되어야 함 01 트랜잭션(컴퓨터로 처리하는 작업의 단위) 처리 순서는 중요하지 않지만 두 개의 UPDATE 문이 모두 정상적으로 실행되어야 함 트랜잭션의 예 (1)
정상적으로 실행되어야 상품주문 트랜잭션이 성공적으로 수행됨 01 트랜잭션 트랜잭션의 예 (2) INSERT 문과 UPDATE 문이 모두 정상적으로 실행되어야 상품주문 트랜잭션이 성공적으로 수행됨
01 트랜잭션 트랜잭션의 특성(ACID 특성)
01 트랜잭션 트랜잭션의 특성 – 원자성(atomicity) 트랜잭션의 연산들이 모두 정상적으로 실행되거나 하나도 실행되지 않아야 하는 all-or-nothing 방식을 의미 만약 트랜잭션 수행 도중 장애가 발생하면? 지금까지 실행한 연산들 모두 처리를 취소하고 데이터베이스를 트랜잭션 작업 전 상태로 되돌려야 함 원자성 보장을 위해 장애 발생 시 회복 기능이 필요
01 트랜잭션 트랜잭션의 특성 – 원자성
01 트랜잭션 트랜잭션의 특성 – 원자성
01 트랜잭션 트랜잭션의 특성 – 일관성(consistency) 트랜잭션이 성공적으로 수행된 후에도 데이터베이스가 일관성 있는 상태를 유지해야 함을 의미
01 트랜잭션 트랜잭션의 특성 – 일관성
01 트랜잭션 트랜잭션의 특성 – 격리성(isolation) 수행 중인 트랜잭션이 완료될 때까지 다른 트랜잭션들이 중간 연산 결과에 접근할 수 없음을 의미 여러 트랜잭션이 동시에 수행되더라도 마치 순서대로 하나씩 수행되는 것처럼 정확하고 일관된 결과를 얻을 수 있도록 제어하는 기능이 필요
01 트랜잭션 트랜잭션의 특성 – 격리성 계좌번호=200;
01 트랜잭션 트랜잭션의 특성 – 지속성(durability) 트랜잭션의 4가지 특성을 보장하기 위해 필요한 기능 트랜잭션이 성공적으로 완료된 후 데이터베이스에 반영한 수행 결과는 영구적이어야 함을 의미 지속성의 보장을 위해서는 장애 발생 시 회복 기능이 필요 트랜잭션의 4가지 특성을 보장하기 위해 필요한 기능
01 트랜잭션 트랜잭션의 주요 연산
01 트랜잭션 트랜잭션의 주요 연산 – commit 연산 트랜잭션의 수행이 성공적으로 완료되었음을 선언하는 연산
01 트랜잭션 트랜잭션의 주요 연산 – rollback 연산 트랜잭션의 수행이 실패했음을 선언하는 연산
01 트랜잭션 트랜잭션의 상태
01 트랜잭션 트랜잭션의 상태 활동(active) 상태 부분 완료(partially committed) 상태 트랜잭션이 수행을 시작하여 현재 수행 중인 상태 부분 완료(partially committed) 상태 트랜잭션의 마지막 연산이 실행을 끝낸 직후의 상태 완료(committed) 상태 트랜잭션이 성공적으로 완료되어 commit 연산을 실행한 상태 트랜잭션이 수행한 최종 결과를 데이터베이스에 반영하고 데이터베이스가 새로운 일관된 상태가 되면서 트랜잭션이 종료됨
01 트랜잭션 트랜잭션의 상태 실패(failed) 상태 철회(aborted) 상태 장애가 발생하여 트랜잭션의 수행이 중단된 상태 철회(aborted) 상태 트랜잭션의 수행 실패로 rollback 연산을 실행한 상태 지금까지 실행한 트랜잭션의 연산을 모두 취소하고 트랜잭션이 수행되기 전의 데이터베이스 상태로 되돌리면서 트랜잭션이 종료됨 철회 상태로 종료된 트랜잭션은 상황에 따라 다시 수행되거나 폐기됨
02 장애와 회복 장애(failure) 시스템이 제대로 동작하지 않는 상태 표 10-1 장애의 유형 연산자 설명 트랜잭션 장애 의미 트랜잭션 수행 중 오류가 발생하여 정상적으로 수행을 계속할 수 없는 상태 원인 트랜잭션의 논리적 오류, 잘못된 데이터 입력, 시스템 자원의 과다 사용 요구, 처리 대상 데이터의 부재 등 시스템 장애 하드웨어의 결함으로 정상적으로 수행을 계속 할 수 없는 상태 하드웨어 이상으로 메인 메모리에 저장된 정보가 손실되거나 교착 상태가 발생한 경우 등 미디어 장애 디스크 장치의 결함으로 디스크에 저장된 데이터 베이스의 일부 혹은 전체가 손상된 상태 디스크 헤드의 손상이나 고장 등
02 장애와 회복 데이터베이스를 저장하는 저장 장치의 종류 표 10-2 저장 장치의 종류 저장 장치 설명 휘발성(volatile) (소멸성) 의미 장애가 발생하면 저장된 데이터가 손실됨 예 메인 메모리 등 비휘발성(nonvolatile) (비소멸성) 장애가 발생해도 저장된 데이터가 손실되지 않음 단, 디스크 헤더 손상 같은 저장장치 자체에 이상이 발생하면 데이터가 손실될 수 있음 디스크, 자기 테이프, CD/DVD 등 안정(stable) 비휘발성 저장 장치를 이용해 여러 개 복사본을 만드는 방법으로, 어떤 장애가 발생해도 데이터가 손실되지 않고 데이터를 영구적으로 저장할 수 있음
02 장애와 회복 트랜잭션의 수행을 위해 필요한 데이터 이동 연산 디스크와 메인 메모리 간의 데이터 이동 연산 : input / output 메인 메모리와 프로그램 변수 간의 데이터 이동 연산 : read / write
02 장애와 회복 디스크와 메인 메모리 간의 데이터 이동 연산의 필요성 일반적으로 데이터베이스는 비휘발성 저장 장치인 디스크에 상주 트랜잭션이 데이터베이스의 데이터를 처리하기 위해서는 데이터를 디스크에서 메인 메모리로 가져와 처리한 다음 그 결과를 디스크로 보내는 작업이 필요함
02 장애와 회복 디스크와 메인 메모리 간의 데이터 이동 연산 input 연산 / output 연산 블록(block) 단위로 수행됨 디스크 블록 : 디스크에 있는 블록 버퍼 블록 : 메인 메모리에 있는 블록
02 장애와 회복 메인 메모리와 변수 간의 데이터 이동 연산 read 연산 / write 연산 응용 프로그램에서 트랜잭션의 수행을 지시하면 메인 메모리 버퍼 블록에 있는 데이터를 프로그램의 변수로 가져오고 데이터를 처리한 결과를 저장하고 있는 변수 값을 메인 메모리 버퍼 블록으로 옮기는 작업이 필요
02 장애와 회복 트랜잭션을 데이터 이동 연산을 포함한 프로그램으로 표현한 예
02 장애와 회복 회복(recovery) 장애가 발생했을 때 데이터베이스를 장애가 발생하기 전의 일관된 상태로 복구시키는 것 트랜잭션의 특성을 보장하고, DB를 일관된 상태로 유지하기 위해 필수적인 기능 회복 관리자(recovery manager)가 담당 장애 발생을 탐지하고, 장애가 탐지되면 데이터베이스를 복구하는 기능을 제공
02 장애와 회복 회복을 위해 데이터베이스 복사본을 만드는 방법 데이터베이스 핵심 원리는 데이터 중복!
02 장애와 회복 로그를 이용한 회복 연산
02 장애와 회복 로그 파일 데이터를 변경하기 이전의 값과 변경한 이후의 값을 기록한 파일 레코드 단위로 트랜잭션 수행과 함께 기록됨 표 10-3 로그 레코드의 종류 로그 레코드 설명 <Ti ,start> 의미 트랜잭션 Ti가 수행을 시작했음을 기록 예 <T1 ,start> <Ti ,X, old_value, new_value> 트랜잭션 Ti가 데이터 X를 이전 값(old_value)에서 새로운 값(new_value)으로 변경하는 연산을 실행했음을 기록 <T1 ,X, 10000, 5000> <Ti ,commit> 트랜잭션 Ti가 성공적으로 완료되었음을 기록 <T1 ,commit> <Ti ,abort> 트랜잭션 Ti가 철회되었음을 기록 <T1 ,abort>
02 장애와 회복 로그 기록 예
02 장애와 회복 회복 기법
02 장애와 회복 로그 회복 기법 – 즉시 갱신(immediate update) 회복 기법 트랜잭션 수행 중에 데이터 변경 연산의 결과를 데이터베이스에 즉시 반영 장애 발생에 대비하기 위해 데이터 변경에 관한 내용을 로그 파일에 기록 데이터 변경 연산이 실행되면 로그 파일에 로그 레코드를 먼저 기록한 다음 데이터베이스에 변경 연산을 반영 장애 발생 시점에 따라 redo나 undo 연산을 실행해 데이터베이스를 복구
02 장애와 회복 로그 회복 기법 – 즉시 갱신 회복 기법
02 장애와 회복 로그 회복 기법 – 즉시 갱신 회복 기법
02 장애와 회복 로그 회복 기법 – 즉시 갱신 회복 기법 적용 예 에서 장애 발생 시 : undo(T1) 에서 장애 발생 시 : undo(T2), redo(T1)
02 장애와 회복 로그 회복 기법 – 지연 갱신(deferred update) 회복 기법 트랜잭션 수행 중에 데이터 변경 연산의 결과를 로그에만 기록해두고, 트랜잭션이 부분 완료된 후에 로그에 기록된 내용을 이용해 데이터베이스에 한번에 반영 트랜잭션 수행 중에 장애가 발생하면 로그에 기록된 내용을 버리기만 하면 데이터베이스가 원래 상태를 그대로 유지하게 됨 undo 연산은 필요 없고 redo 연산만 사용 로그 레코드에는 변경 이후 값만 기록하면 됨 : <T1, X, new_value> 형식
02 장애와 회복 로그 회복 기법 – 지연 갱신 회복 기법
로그 기록을 무시하고 별다른 회복 조치를 하지 않음 02 장애와 회복 로그 회복 기법 – 지연 갱신 회복 기법 적용 예 에서 장애 발생 시 : 로그 기록을 무시하고 별다른 회복 조치를 하지 않음 에서 장애 발생 시 : redo(T1)
02 장애와 회복 검사 시점 회복 기법 로그 기록을 이용하되, 일정 시간 간격으로 검사 시점(checkpoint)를 만듦 검사 시점이 되면 모든 로그 레코드를 로그 파일에 기록하고 데이터 변경 내용을 데이터베이스에 반영한 후 검사 시점을 표시하는 <checkpoint L> 로그 레코드를 로그 파일에 기록함 <checkpoint L>에서 L은 현재 실행되고 있는 트랜잭션의 리스트 장애 발생 시 가장 최근 검사 시점 이후의 트랜잭션에만 회복 작업 수행 가장 최근의 <checkpoint L> 로그 레코드 이후 기록에 대해서만 회복 작업 수행 회복 작업은 즉시 갱신 회복 기법이나 지연 갱신 회복 기법을 이용해 수행 로그 전체를 대상으로 회복 기법을 적용할 때 발생할 수 있는 비효율성의 문제를 해결 검사 시점으로 작업 범위가 정해지므로 불필요한 회복 작업이 없어 시간이 단축됨
02 장애와 회복 미디어 회복 기법 디스크에 발생할 수 있는 장애에 대비한 회복 기법 덤프(복사본) 이용 전체 데이터베이스의 내용을 일정 주기마다 다른 안전한 저장 장치에 복사 디스크 장애가 발생하면 가장 최근에 복사해둔 덤프를 이용해 장애 발생 이전의 데이터베이스 상태로 복구하고 필요에 따라 redo 연산을 수행