본문 바로가기

Programming/DataBase System

Chapter1 - 트랜잭션 관리

  • 트랜잭션 관리

대개, 데이터베이스에 대한 몇 개의 연산이 하나의 논리적 작업 단위를 이룬다. 예금 이체가 하나의 예인데, 이떄 한 학과의 계좌(예를 들면, A)는 출금 계좌이고, 다른 학과의 계좌(B라고 하자)는 입금 계좌이다. 분명히, 입금과 출금이 모두 일어나든지, 모두 일어나지 않든지 하는 것이 필수적이다. 즉, 예금 이체는 전체가 완전히 수행되거나, 일체 수행되지 않아야 한다. 이러한 all or none 요구 조건을 원자성(consisteny)이라고 한다. 또한, 예금 이체의 실행은 데이터베이스의 일고나서을 보존해야 한다. 즉, A의 잔고와 B의 잔고를 합한 값이 보존되어야 한다. 이러한 영속성의 요구 조건을 지속성(durability)이라고 한다.

    트랜잭션(transaction)은 데이터베이스 응용 프로그램에서 하나의 논리적 기능을 수행하는 연산들의 모임이다. 각 트랜잭션은 원자성일관성 모두를 지닌 단위로 수행되어야 한다. 그러므로 트랜잭션은 어떤 데이터베이스 일관성 제약 조건도 위반해서는 안된다. 즉, 트랜잭션이 시작될 때 데이터베이스가 일관성 있는 상태였다면 트랜잭션이 성공적으로 종료되었을 때에서 일관성 있는 상태여야 한다. 그러나 A계좌에서의 출금과 B계좌에서의 입금이 엄릴하게 동시에 처리될 수는 없고 한 개 씩 처리되다 보면, 트랙잭션이 실행되는 동안 일시적인 불일치 - 비일관성은 불가피하다. 그러나 하필 그때 고장이 발생하면 치명적인 문제가 된다.

    각각의 트랜잭션이 데이터베이스의 일관성을 유지하도록 여러 트랜잭션을 적절하게 정의하는 것은 프로그래머의 책임이다. 예를 들어 A학과의 계좌에서 B학과의 계좌로 예금을 이체하는 트랜잭션은 두 개의 프로그램이 차례대로 실행되면 당연히 일관성을 유지하겠지만, 각 프로그램 그 자체는 데이터베이스를 어떤 일관성 상태에서 새로운 또 하나의 일관성 상태로 바꾸는 것이 아니므로, 이들은 트랜잭션이 아니다.
    원자성과 지속성을 보장하는 것은 데이터베이스 시스템 - 특히 복구 관리자(recovery manger)의 책임이다. 고장이 없으면, 모든 트랜잭션이 성공적으로 잘 수행되고, 원자성도 쉽게 얻을 수 있다.

    그러나 다양한 종류들의 고장 상황이 상존하기 때문데, 트랜잭션을 항상 성공적으로 실행완료할 수는 없다. 원자성의 특성을 보장하려면, 실패한 트랜잭션이 데이터베이스의 상태에서 아무런 영향을 주지 말아햐 한다. 따라서 데이터베이스는 트랜잭션이 일어나기 전의 상태로 재저장되어야 한다. 그러므로 데이터베이스는 실패 복구(failure recovery)를 수행해야만 한다. 즉, 시스템의 고장을 탐지하고 실패 방생 이전의 상태로 데이터베이스를 재저장 하는것은 데이터베이스 시스템의 책임이다. 

    마지막으로, 여러 트랜잭션들이 데이터베이스를 동시에 변경하면, 개별 트랜잭션이 정확하고 오류가 없다 하더라도 데이터의 일관성은 더 잇아 유지되지 않는다. 데이터베이스의 일관성을 보장하기 위해, 동시 실행 트랜잭션들 간의 상호 작용을 제어하는 것은 동시성 제어 관리자(concurrency-control manager) 의 책임이다. 트랜잭션 관리자(transaction manager)는 동시성 제어 관리자와 복구 관리자로 구성된다.

    트랜잭션 개념은 데이터베이스 시스템과 응요 프로글매에 광범위하게 적용되어 왔다. 초기의 트랜잭션 사용은 재무를 다루는 응용 프로그램에서였으나 이제는 상품을 설계하거나 경영상의 워크플로우 같은 긴 시간을 요구한느 관리뿐만이 아니라 전자 통신에서의 실시간 응용 프로그램에서도 사용된다.