[DB] DB 트랜잭션(transaction)

jjenny7·2022년 10월 12일
0

DataBase

목록 보기
8/12

DB 트랜잭션(Transaction)

트랜잭션이란?

인가받지 않은 사용자로부터 데이터를 보장하기 위해 DBMS가 가져야하는 특성이자, 데이터베이스 시스템에서 하나의 논리적 기능을 정상적으로 수행하기 위한 작업의 기본 단위

논리적 기능을 수행한다는 것, 상태를 변화한다는 것 -> SQL 질의어를 통해 DB에 접근하는 것

SELECT
INSERT
DELETE
UPDATE

트랜잭션의 특성

  1. 원자성(Atomicity)
    • 분해가 불가능한 작업의 최소 단위
    • 연산 전체가 성공 또는 실패(all or noting)
    • 하나라도 실패할 경우 전체가 취소되어야하는 특성
    • 트랜잭션이 DB에 모두 반영되거나, 혹은 전혀 반영되지 않아야 한다.
    • 주요기법 : commit / rollback, 회복성 보장
  2. 일관성(Consistency)
    • 트랜잭션이 실행 성공 후 항상 일관된 데이터베이스 상태를 보존해야하는 특성
    • 주요기법 : 무결성 제약조건, 동시성 제어
  3. 격리성(Isolation)
    • 트랜잭션 실행 중 생성하는 연산의 중간 결과를 다른 트랜잭션이 접근 불가한 특성
    • 둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없다.
    • 주요 기법 (데이터베이스의 고립화 수준)
      • read uncommited
      • read commited
      • repeatabke read
      • serializable
  4. 영속성(Durability)
    • 성공이 완료된 트랜잭션의 결과는 영속적으로 데이터베이스에 저장하는 특성
    • 주요 기법 : 회복기법

트랜잭션의 상태변화

  • 활동 상태 (active) : 초기 상태, 트랜잭션이 실행 중일 때 가지는 상태
  • 부분 완료 상태 (partically committed) : 마지막 명령문이 실행된 후에 가지는 상태
  • 완료 상태 (committed) : 트랜잭션이 성공적으로 완료된 후 가지는 상태
  • 실패 상태 (failed) : 정상적인 실행이 더 이상 진행될 수 없을 때 가지는 상태
  • 철회 상태 (aborted) : 트랜잭션이 취소되고 데이터베이스가 트랜잭션 시작 전 상태로 환원된 상태

트랜잭션 제어

트랜잭션 제어 언어는 TCL(Transaction control language)이라고 하며, 트랜잭션의 ㅕㄱㄹ과를 허용하거나 취소하는 목적으로 사용되는 언어를 지칭한다.

커밋 commit : 트랜잭션 확정, 트랜잭션을 메모리에 영구적으로 저장하는 명령어
롤백 rollback : 트랜잭션 취소, 트랜잭션 내역을 저장 무효화시키는 명령어
체크포인트 checkpoint : 저장 시기 설정, rollback을 위한 시점을 지정하는 명령어

병행 제어(일관성 주요 기법)

병행제어(concurrency control)란?

병행제어는 다수 사용자 환경에서 여러 트랜잭션을 수행할 때, 데이터베이스 일관성 유지를 위해 상호작용을 제어하는 기법이다.

병행 제어의 목적

  • 데이터베이스 공유 최대화
  • 시스템 활용도 최대화
  • 데이터베이스 일관성 유지
  • 사용자에 대한 응답시간 최소화

병행 제어 미보장시 문제점

병행 제어 미보장 시 문제점은 갱신 손실, 현황 파악 오류, 모순성, 연쇄복귀가 있다

  1. 갱신 손실(lost update) : 먼저 실행된 트랜잭션의 결과를 나중에 실행된 트랜잭션이 덮어쓸 때 발생하는 오류
  2. 현황 파악오류(dirty read) : 트랜잭션의 중간 수행 결과를 다른 트랜잭션이 참조하여 발생하는 오류
  3. 모순성(inconsistency) : 두 트랜잭션이 동시에 실행되어 데이터베이스의 일관성이 결여되는 오류
  4. 연쇄복귀(cascading rollback) : 복수의 트랜잭션이 데이터 공유 시 특정 트랜잭션이 처리를 취소할 경우 트랜잭션이 처리한 곳의 부분을 취소하지 못하는 오류
profile
水急不流月

0개의 댓글