본문 바로가기
🌈 백엔드/데이터베이스

DB_데이터베이스_트랜잭션

by 개발자 알마 2023. 4. 25.
반응형

 

[1] 트랜잭션


(1) 트랜잭션 필요성

현실세계에서 예약, 은행, 할인 등 대규모의 데이터베이스를 사용할때

수천명 이상의 사용자가 동시에 데이터베이스에 접근하여 데이터베이스의 데이터를 사용하므로

데이터의 정확성 유지를 위해 항상 트랜잭션 관리가 중요해졌다

 

(2) 정의

  • 프로그램 단위
  • 논리적 기능을 수행하기 위한 기본 단위 
  • 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위 
  • 분리할수 없는 작업의 단위 
  • 각 트랜잭션은 하나의 특정작업으로 시작을 해서 묶여있는 모든 작업들을 다 완료해야 정상적으로 종료한다 

 

(3) 2가지 특성 

1. 오류에 대한 회복

  • 데이터베이스 갱신 중 하드웨어 오류, 시스템 고장으로 인해 고장나도 일관성을 유지한다 

 

2. 동시성 제어 

  • 다수 사용자가 데이터베이스를 동시에 접근하여 수행을 허용받았을때  데이터베이스의 일관성을 유지할수 있도록 각 트랜잭션들이 순차적으로 수행하였을때와 동일한 결과가 되도록 보장한다 

 

 

(4) 트랜잭션의 속성 : ACID

1. 원자성 Atomicity

  • 트랜잭션의 연산들이 모두 성공하거나 ALL  , 모두 실패되는 Nothing 특성

 

예제

 

1번 트랜잭션 : A계좌 출금한다

2번 트랜잭션 : B계좌에 입금한다 

 

각 트랜잭션이 동시에 수행해야하나 데이터의 무결성을 보장하기 위해 순서대로 처리한 결과로 보여야하고 , 각 트랜잭션은 1개의 단계로 묶어 종료해야한다 

 

A계좌로 출금한뒤 B 계좌로 입금을 하지 않는다면 데이터 오류 ! 

A계좌로 출금해야하는데 오류로 출금을 안했는데 B 계좌로 입금을 한다면 데이터오류 !

아예 B계좌로 입금이 안된다면 A계좌 출금도 진행 안되게 모든 트랜잭션 작업을 취소시켜(롤백) 데이터를 보존한다  : Nothing 

아예 A계좌로 출금이 안된다면 B계좌 입금도 진행 안되게 모든 트랜잭션 작업을 취소시켜(롤백) 데이터를 보존한다 : Nothing 

A계좌로 출금 이 정상적이고 B 계좌 입금도 정상적이다 , 모든 트랜잭션 작업이 성공하여 데이터 연산이 처리되었다 : ALL 

 

2. 일관성 Consistency

  • 고립상태에서는 트랜잭션이 수행되기 전과 트랜잭션 완료 후에도 일관성 있는 상태를 유지한다 

예제 

 

트랜잭션 동시 수행 전 총 금액 : 10000원

1번 트랜잭션 : A계좌 1000원 출금한다 

2번 트랜잭션 : B계좌에 1000원 입금한다

트랜잭션 동시 수행 후 총 금액 : 10000원 

 

각 트랜잭션이 동시에 수행해야하나 데이터의 무결성을 보장하기 위해 순서대로 처리한 결과로 보여야하고 , 각 트랜잭션은 1개의 단계로 묶어 종료해야한다

 

A계좌로 출금한뒤 B 계좌로 입금을 하지 않는다면 총 데이터 : 9000원  데이터 오류!

A계좌로 출금해야하는데 오류로 출금을 안했는데 B 계좌로 입금을 한다면 총데이터 : 11000원 데이터 오류! 

아예 B계좌로 입금이 안된다면 A계좌 출금도 진행 안되게 모든 트랜잭션 작업을 취소시켜(롤백) 데이터를 보존한다  : Nothing 

아예 A계좌로 출금이 안된다면 B계좌 입금도 진행 안되게 모든 트랜잭션 작업을 취소시켜(롤백) 데이터를 보존한다 : Nothing 

A계좌로 출금 이 정상적이고 B 계좌 입금도 정상적이다 , 모든 트랜잭션 작업이 성공하여 데이터 연산이 처리되었다 : ALL 

 

※ 고립상태 : 각 트랜잭션이 동시에 수행을 하지 않는 조용한 상태 

※ 비일관적인 상태 : 각 트랜잭션이 동시에 수행중인 상태 

 

3.고립성 Isolation

  • 각 트랜잭션은 고립;격리 되어있어 트랜잭션이 수행이 되어 고립상태가 되었을때 다른 트랜잭션이 수행되어야한다 

 

예제 

 

트랜잭션 동시 수행 전 총 금액 : 10000원 

 

1번 트랜잭션 : A계좌 5000원 출금한다 

2번 트랜잭션 : B계좌에 5000원 입금한다

고립상태

3번 트랜잭션 : A계좌 6000원 출금한다 

4번 트랜잭션 : B계좌에 6000원 입금한다 

 

각 트랜잭션이 동시에 수행해야하나 데이터의 무결성을 보장하기 위해 순서대로 처리한 결과로 보여야하고 , 각 트랜잭션은 1개의 단계로 묶어 종료해야한다

 

(1번2번) 트랜잭션이 한 수행의 단계 이고 , (3번4번) 트랜잭션이 한 수행의 단계이다. 

1번 트랜잭션과 3번 트랜잭션을 동시에 수행하면 총 금액은 -1000원 이기 때문에 데이터 무결성이 깨진다 

1번2번 트랜잭션을 수행한 뒤에 고립상태 후 3번4번 트랜잭션을 실행해야하며 , 이 경우 금액이 부족하기 때문에 실행 불가로 3번4번 트랜잭션은 1번 원자성 원칙하에 트랜잭션 작업을 실패해야한다 

 

 

4. 지속성 Durability

  • 트랜잭션이 성공적으로 수행되었다면 그에 따른 로그;기록이 남아있어야한다 

예제 

 

온라인뱅킹 오전 0시~0시 30분 동안 점검 시간을 가진다.

점검시간 전의 데이터베이스 상태와 점검 이후 데이터베이스 상태와 동일해야하며 

혹여 문제가 생겨 시스템이 다운되어 점검시간이 연장되더라도 트랜잭션의 로그를 역추적하여 정상 데이터베이스 상태를 유지한다 

 

 

(5) 트랜잭션 상태 다이어그램

 

시작 단계 Start 트랜지션 시작 명령
동작 단계  Active 트랜지션 실행중
부분완료 Partially Committed 트랜지션 수행의 마지막 명령어 실행
완료 Committed 트랜지션 수행이 정상적으로 완료
실패 Failed 트랜지션 수행을 정상적으로 못하는 단계 
취소 Aborted 트랜지션 시작단계 전으로 롤백(Rollback)한 상태 

 

 

[2] 트랜지션의 무결성


(1) 무결성의 개요

1. 무결성의 이해

  • 정의 : 데이터베이스의 데이터가 오류가 없도록 일관성을 유지하는것 
  • 종류 : 개체 무결성, 참조 무결성 , 도메인 무결성 

2. 무결성의 문제

  • 중복된 데이터는 무결성 유지가 어렵다 
  • 데이터가 많을수록 중복된 데이터를 찾기 어렵다. 무결성 유지가 어렵다 

3. 무결성 유지

  • 중복된 데이터를 삭제한다
  • 컴퓨터 시스템에서 인식 되는 중복된 데이터는 제어된 중복이라고 한다 

 

(2) 무결성 유지를 위한 종류

 

1. 개체 무결성 Entity Integrity

  • 기본키와 관계된 유지방법
  • 기본키의 Not Null 중복 불가 특징을 사용한다 
  • 기본키에 대해 릴레이션 내 모든 튜플은 유일성이 보장되어 구분이 된다 

2.참조 무결성 Reference Integrity

  • 외래키와 관계된 유지방법
  • 릴레이션 r(R) 과 s(S) 에서 r이 s를 참조할때 , 외래키는 참조 릴레이션 s(S)의 기본키와 같다 

3. 도메인 무결성 Domain Integrity

  • 속성값과 관계된 유지방법
  • 도메인에 제한된 값만 사용 가능하다
  • 새로운 데이터가 삽입되면 데이터베이스 시스템에 의해 테스트한다

 

(3) 무결성 서브 시스템 Integrity Sub-System

  • 정의 : 트랜잭션이 수행하는 갱신 연산이 무결성 규정에 위반되는지 감시하고 위반하는 경우 트랜잭션을 취소시키거나 거부하는 동작을 하는 시스템 
  • DBMS 의 구성요소
  • 목적 : 무결성 규정을 관리 유지하는 역할 수행

 

(4) 무결성 규정 = 무결성 제약

1.개요 

  • 정의 : 데이터의 정밀성과 정확성을 유지하기 위한 규칙 
  • 잘못된 갱신으로부터 데이터베이스를 보호하여 의미적 오류를 발생하지 않도록 하기위한 규정

2. 무결성 규정의 구조 

규정 이름 규정을 참조하는 식별자 
검사 시기 트랜잭션의 접근 유형과 데이터를 감시할 시기를 기술
제약 조건 데이터가 만족해야할 조건
위반 조치 제약 조건 검사 결과 위반이 발견되었을때 대응 조치를 기술 

 

3. 무결성 규정의 예

 

무결성 규정 구문의 구성
규정이름 R1
AFTER절 검사 시기 
CHECK절 제약 조건
ELSE절 위반 조치

 

R1 : AFTER UPDATING STUDENT.CLASS     		// 규정이름 R1 : 검사 시기 
		CHECK(STUDENT.CLASS>=0) 	// 제약조건 
		ELSE 				// 위반조치
        		DO;
                		PRNT "R1 Error!"	// 위반조치시 에러발생
                    		REJEXCT;
                    		END;

 

 

4. 트리거 Trigger 

  • 정의 : 데이터베이스의 특정 테이블에 INSERT, DELETE , UPDATE 같은 DML 문이 수행되었을때 , 데이터베이스에서 자동으로 동작하도록 작성된 프로그램 
  • 트리거 종류 : 전체 트랜잭션 작업에 대해 발생하는 트리거 ,  각 행에 대해 발생되는 트리거 

 

  행 트리거 문장트리거
정의 
OLD , NEW 가상 줄 변수를 사용하여 읽는다

INSERT, UPDATE, DELETE 문에 대해 한번만 실행된다 
속성 
BEFORE 또는 AFTER로 트리거의 실행 시기를 지정한다 
INSTEAD OF 로 트리거를 원래 문장 대신 수행한다 
WHEN으로 트리거를 시작하는 조건식을 지정한다 

발생 경우 
INSERT 새로운 행 삽입 
UPDATE 기존 행 변경
UPDATE OF 기존 행의 특정 열 변경
DELETE 기존 행 삭제 

장점
데이터 무결성 강화 
업무규칙의 설정
검사 기능의 확장

단점
유지보수의 어려움
예상치 못한 오류 

 

 

 

 

[3] 병행 수행 제어 


(1) 병행 수행 제어의 개요 

1. 정의

  • 트랜잭션의 상호 작용을 제어하여 고립성을 유지, 보장하기 위한 제어동작이다 
  • 동시성 제어기법 ( 직렬성 기반 ) 
  • 병행 수행 제어의 문제점이 발생한다  

 

2. 병행 수행 제어의 필요성

  • DBMS는 여러명의 사용자가 동시에 사용하므로 병행수행제어는 필수적이다 
  • DBMS의 성능을 높이기 위해 여러 사용자의 질의나 프로그램들을 동시에 수행하는것에 필수적이다 

 

 

(2) 병행 수행 제어의 문제점

1. 갱신분실

  • 2개의 트랜잭션을 동시에 갱신하기 위해 연산을 수행할때 , A트랜잭션은 결과가 반영되지만 B트랜잭션은 연산이 무효화 되는 문제가 발생한다 

2. 모순성

  • 2개의 트랜잭션을 동시에 갱신하기 위해 연산을 수행할때 , 데이터베이스가 일관성이 없는 모순된 상태가 되는 문제가 발생한다 

3. 연쇄복귀

  • 2개의 트랜잭션이 각 레코드에 동시에 접근할때 , A트랜잭션이 X레코드를 판독 후 갱신한 뒤 B트랜잭션이 X레코드를 판독해서 갱신을 완료 했을때 B는 A의 Dirty read를 수행한다
  • A트랜잭션의 문제 발생으로 롤백을 수행하려고 했으나 B트랜잭션이 완료되어버려 복귀할수가 없다 

4. 반복할수 없는 읽기

  • 트랜잭션이 동일한 데이터를 두번 읽을때 서로 다른 값을 읽는 오류가 발생한다 

 

※  Dirty read : 완료되지 않은 트랜잭션이 갱신한 데이터를 읽는 동작 

(3) 동시성 제어 기법의 종류

1. Locking

  • 트랜잭션들의 동시성을 제어하기 위한 기법
  • 특정 자원에 대하여 잠금을 하여 작업 수행을 완료 한 후 잠금을 해제한다 
  • 트랜잭션이 데이터 항목에 대한 접근 작업을 시작할때 Lock 을 설정한다 

 

2. 타임스탬프

 

- 정의

  • 트랜잭션을 식별하기 위해 DBMS에 의해 생성된 고유 식별자이다 

 

- 특징

  • 트랜잭션이 시스템에 들어오는 순서대로 지정하여 트랜잭션 간의 직렬성을 보장받는다 
  • 교착 상태를 방지한다
  • 연속 복귀 문제가 발생할수 있어 완료 비트를 설정한다 

- 타임스탬프 기법 종류 

  • 시스템 클록 사용 기법 : 트랜잭션이 시작될때 시스템 클록값을 타임스탬프로 사용한다 
  • 논리적 계수 사용 기법 : 트랜잭션이 시작될때 계수 증가값을 타임스탬프로 사용한다 

 

반응형

댓글