Transaction

강현구·2022년 1월 25일
0

Database Transaction

Database Transaction

데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위
(여기서 유사한 시스템이란 트랜잭션이 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미한다.)
이론적으로 데이터베이스 시스템은 각각의 트랜잭션에 대해 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 영구성(Durability)을 보장한다. 이 성질을 첫글자를 따 ACID라 부른다. 그러나, 실제로는 성능향상을 위해 이런 특성들이 종종 완화되곤 한다.
출처 : 위키백과

Transaction property

  • 트랜잭션의 진행 전과 완료 후에 상태를 볼 수 있으나, 트랜잭션의 진행 중인 데이터는 볼 수 없다.
  1. 원자성 (Atomicity)
    분리 할 수 없는 하나의 단위로 작업은 모두 완료되거나 모두 취소되야 한다.
    예를 들어 은행에서 이체 과정 중 트랜잭션이 실패해서 예금이 사라지는 경우가 발생하면 안 되기 때문에 DBMS는 완료되지 않은 트랙잭션의 중간 상태를 데이터베이서에 반영해서는 안 된다. 즉, 트랜잭션의 모든 연산들이 정상적으로 수행 완료되거나 아니면 어떠한 연산도 전혀 수행되지 않은 상태를 보장해야 한다.
    Atomicity는 쉽게 "All or Nothing"으로 설명된다.

  2. 일관성 (Consistency)
    사용되는 모든 데이터는 일관되야 한다.
    독립적인 트랜잭션의 수행이 데이터베이스의 일관성을 보존해야 한다. 즉, 성공적으로 수행된 트랜잭션은 정당한 데이터만을 데이터베이스에 반영해야 한다. 트랜잭션의 수행을 데이터베이스 상태 간의 전이(transition)로 봤을 때, 트랜잭션 수행 전후의 데이터베이스 상태는 각각 일관성이 보장되는 서로 다른 상태가 됩니다. 트랜잭션 수행이 보전해야 할 일관성은 기본키, 외래키 제약과 같은 명시적인 무결성 제약 조건들 뿐만 아니라, 자금 이체 예에서 두 계좌 잔고의 합은 이체 전후가 같아야 한다는 것과 같은 비명시적인 일관성 조건도 있다.

  3. 독립성 (Isolation)
    접근하고 있는 데이터는 다른 트랜잭션으로부터 독립적이여야 한다.
    여러 트랜잭션이 동시에 수행되더라도 각각의 트랜잭션은 다른 트랜잭션의 수행에 영향을 받지않고 독립적으로 수행되어야 한다. 즉, 한 트랜잭션의 중간결과가 다른 트랙잭션에게는 숨겨져야 한는 의미인데, 이러한 Isolation 성질이 보장되지 않으면 트랜잭션이 원래 상태로 되돌아갈 수 없게 된다. Isolation 성질을 보장할 수 있는 가장 쉬운 방법은 모든 트랜잭션을 순차적으로 수행하는 것이다. 하지만 DBMS는 병렬로 수행하면서도 일렬(Serial)수행과 같은 결과를 보장할 수 있는 방식을 제공하고있다.

  4. 지속성 (Durability)
    트랜잭션이 정상 종료되면 그 결과는 시스템에 지속성이 있어야 한다.
    트랜잭션이 성공적으로 완료되고 나면, 해당 트랜잭션에 의한 모든 변경은 향후 어떤 소프트웨어나 하드웨어 장애가 발생하더라도 보존되야 한다.

트랜잭션 연산

  • Commit
    Commit 연산은 한 개의 논리적 단위(트랜잭션)에 대한 작업이 성공적으로 끝났고, 데이터베이스가 다시 일관된 상태에 있을 때, 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산이다.

  • Rollback
    Rollback 연산은 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 이 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소(Undo)하는 연산이다.

  • Rollback 시에는 해당 트랜잭션을 재시작하거나 폐기한다. (Redo, Undo)

Rollback (Redo, Undo)

  • Undo
    트랜잭션 로그를 활용하여 오류와 관련된 모든 변경 취소하여 복구 실행
    로그 파일에 시작(START)은 있고 종료(COMMIT)은 없는 경우
  • Redo
    트랜잭션 로그를 이용하여 오류가 발생한 트랜잭션을 재수행하여 복구 실행
    로그 파일에 시작(START)과 종료(COMMIT) 모두 있는 경우

트랜잭션의 상태

  • 활성(Active) : 트랜잭션이 실행중인 상태
  • 실패(Failed) : 트랜잭션 실행에 오류가 발생하여 중단된 상태
  • 철회(Aborted) : 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태
  • 부분 완료(Partially Committed) : 트랜잭션의 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태
  • 완료(Committed) : 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태
profile
한걸음씩

0개의 댓글