데이터베이스의 논리적 작업단위, 트랜잭션(Transaction)

    트랜잭션(Transaction)의 개요

    트랜잭션의 개념

    - 한번에 수행되어야 할 데이터베이스의 일련의 Read, Write 연산을 수행하는 단위

    - 하나의 논리적 기능을 수행하기 위한 데이터베이스 처리작업의 단위

    - 데이터베이스의 일관된 상태를 다른 일관된 상태로 변화시킴

     

    트랜잭션의 특징(ACID)

    원자성(Atomicity)

    - 트랜잭션은 분해가 불가능한 최소의 단위로 연산 전체가 처리 되거나 처리 되지 않아야 됨 (All or Nothing)

    - Commit/Rollback 연산

     

    일관성(Consistency)

    - 일관성 있는 데이터베이스 상태를 보존함

    - 트랜잭션 실행이 성공적으로 완료된 상태면, 데이터베이스는 모순이 없이 일관된 데이터 상태를 유지

     

    고립성(Isolation)

    - 트랜잭션이 실행 중에 생성하는 연산의 중간 결과를 다른 트랜잭션이 접근할 수 없음

    - 고립성으로 인해서 유령 읽기(Phantom Read) 현상 방지

     

    영속성(Durability)

    - 성공이 완료된 트랜잭션의 결과는 영구적으로 데이터베이스에 저장

     

    트랜잭션의 상태전이도

     

    트랜잭션 상태전이도

    상태 설명
    활동(Active) - 트랜잭션이 시작되고 연산들이 정상적으로 실행중인 상태
    부분완료(Partially Committed) - 트랜잭션이 정의된 모든 연산의 실행이 끝난 상태, 즉 Commit 직전 상태
    실패(Failed) - 트랜잭션이 실패 한 후 실행되기 이전으로 복귀한 상태
    철회(Aborted) - 트랜잭션이 실행에 실패하여 취소되고 트랜잭션 시작 전 상태로 환원된 상태
    완료(Committed) - 트랜잭션이 성공적으로 완료된 후, Commit 연산을 수행한 상태

     

    트랜잭션의 직렬성

    트랜잭션 직렬성 개념

    - 트랜잭션의 직렬성이란 여러 트랜잭션이 동시에 병행 처리하여도 트랜잭션을 순차적으로 수행한 결과와 같은 데이터베이스의 일관성을 보장하는 수행 특성

    - 트랜잭션 연산들이 인터리빙되어 수행될 때 어떤 스케쥴이 직렬성이 보장할 수 있는지 판단 필요

     

    트랜잭션 직렬성의 필요성

    - 다수의 동시사용자 환경에서 서로 다른 트랜잭션이 상호간의 처리결과에 영향을 미치지 않도록 하기 위한 "동시성 제어"가 필요함

     

     

    트랜잭션의 3가지 연산

    철회된 트랜잭션

    트랜잭션 재실행(Restart)

    - 철회된 트랜잭션을 다시 새로운 트랜잭션으로 취급하여 재시작하는 방법

    - 철회된 트랜잭션의 내부적인 논리 오류가 아니라 H/W, S/W  오류인 경우

     

    트랜잭션 폐기(Kill)

    - 철회된 트랜잭션을 폐기한다

    - 트랜잭션의 철회 원인이 내부적인 논리 오류가 원인인 경우

     

    정상 종료 트랜잭션

    커밋 연산(Commit)

    - Data 변경 내용을 데이터베이스에 저장하고 새로운 트랜잭션은 commit문 다음 시작 가능

     

    프로그램 정상 종료

    - 새로운 트랜잭션은 시작 불가. 변경 내용 저장을 커밋 연산과 동일한 처리

     

    비정상 종료 트랜잭션

    롤백 연산(Rollback)

    -  해당 트랜잭션을 중지, 폐기하고 데이터베이스 내용을 롤백 수행

    - 새로운 트랜잭션은 롤백 다음 시작 가능

     

    키워드

    ACID : 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)

     

    댓글

    Designed by JB FACTORY