트랜잭션(Transaction)

gang_shik·2022년 5월 28일
0

Database

목록 보기
8/9

트랜잭션

  • 트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미함

  • 상태 변화는 질의어(SQL)를 이용하여 데이터베이스에 접근하는 것, SELECT, INSERT, DELETE, UPDATE

트랜잭션 특징

  • 트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위

  • 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업단위

  • 하나의 트랜잭션은 Commit되거나 Rollback

트랜잭션의 성질

  • 원자성(Atomicity)

    • 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 함

    • 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 함

  • 일관성(Consistency)

    • 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환함

    • 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 함

  • 독립성,격리성(Isolation)

    • 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다른 트랜잭션의 연산이 끼어들 수 없음

    • 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없음

  • 영속성, 지속성(Durablility)

    • 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 함

트랜잭션의 목적

  • 데이터 부정합 방지

    • 데이터베이스 서버에 여러 개의 클라이언트가 동시에 액세스하는 경우

    • 응용프로그램이 갱신을 처리하는 과정에서 중단될 수 있는 경우

  • 데이터베이스의 완전성 유지 확신

    • 데이터베이스가 수행한 일부 쿼리가 남으면 안됨(송금시 한 계좌에서 인출 -> 다른 계좌에서 입금 확인)

    • 트랜잭션은 서로 간섭하면 안됨(쿼리 하나 실패 -> 데이터베이스 시스템이 전체 트랜잭션 또는 실패한 쿼리 롤백)

  • 거래의 안정성 확보

    • 테이블에서 데이터를 읽어옴(다른 테이블에 데이터 입력,갱신,삭제 도중 오류 발생, 모든 작업 원상태로 되돌림)

    • 처리 과정이 모두 성공했을 때만 최종적으로 데이터베이스에 반영

트랜잭션 연산

커밋(Commit)

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

  • 처리 과정을 데이터베이스에 영구적으로 저장, 커밋 수행 후 하나의 트랜잭션 과정 종료, 이전 데이터가 완전히 업데이트 됨

롤백(Rollback)

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

  • 롤백시에는 해당 트랜잭션을 재시작하거나 폐기함

세이브 포인트(Save Point)

  • 임시저장, 부분저장, 전체가 아닌 특정 부분에서 트랜잭션을 취소 위해 사용

  • 현재의 트랜잭션 작게 분할 가능, 여러 개의 SQL문의 실행을 수행하는 트랜잭션의 경우, 사용자가 트랜잭션 중간 단계에서 지정 가능

  • 취소 지점 명시 -> 그 지점까지 작업 취소

트랜잭션 상태

  • 활동(Active) : 트랜잭션이 실행중인 상태

  • 실패(Failed) : 트랜잭션 실행에 오류가 발생하여 중단된 상태

  • 철회(Aborted) : 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태

  • 부분 완료(Partially Committed) : 트랜잭션의 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태

  • 완료(Committed) : 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태

복구

REDO

  • UNDO로 취소했던 작업을 마음이 바뀌어 다시 되돌리는 작업, 취소를 취소

  • 이미 커밋한 트랜잭션의 수정을 재반영하는 복구 작업, 사용자가 했던 작업을 그대로 다시 복구

UNDO

  • 컴퓨터로 무언가를 작업할 때 마음이 들지 않아 조금 전으로 되돌리고 싶을 때 행하는 작업, 방금전에 했던 일을 취소

  • 아직 완료되지 않은 트랜잭션이 수정한 페이지들도 디스크에 출력될 수 있으므로, 해당 트랜잭션이 어떤 이유든 정상적으로 종료될 수 없게 되면 트랜잭션이 변경한 페이지들은 원상 복구되어야함

  • 사용자가 했던 작업을 반대(원상태)로 복구, 무효화

비교

방법

  • 트랜잭션 철회

    • 시스템은 정상적으로 동작하고 있으며, 특정 트랜잭션만 철회하는 경우

    • 로그를 역방향 탐색하면서 해당 트랜잭션의 UNDO 복구가 필요한 로그를 찾아 이에 해당하는 UNDO 연산을 수행

    • UNDO 작업에 대한 REDO 전용 로그 기록

    • 이전 로그 계속 탐색하면서 해당 트랜잭션의 시작 로그까지 도달

  • 재시작 복구

    • 장애 발생 이후 데이터베이스 시스템이 재시작 복구 하는 경우

    • 로그 분석 단계

      • 마지막 체크포인트 시점부터 최근 로그까지 로그를 탐색하면서 시스템 복구 시작 지점, 복구해야할 트랜잭션 등을 알아냄
    • REDO 복구 단계

      • 복구 시작 시점부터 장애 발생 직전 시점까지 REDO가 필요한 모든 로그를 REDO 복구
    • UNDO 복구 단계

      • 로그를 최신 시점부터 다시 역방향으로 탐색하면서 UNDO 복구가 필요한 로그들에 대해 UNDO 복구 수행(여러 트랜잭션 철회)
profile
측정할 수 없으면 관리할 수 없고, 관리할 수 없으면 개선시킬 수도 없다

0개의 댓글