🌱 Computer Science/Database

트랜잭션 특징(ACID) /Rollback /Commit

카프리썬_ 2020. 1. 12. 17:27
728x90
728x90

트랜잭션 

데이터베이스의 상태를 변화시키는 하나의 작업단위를 의미합니다.

DB의 상태는 딱! 2개 Rollback과 commit만 있음

그래서 두가지 상태를 작업하는 실행단위들

 

왜 트랜잭션이 필요할까?

왜 DB는 트랜잭션 기준으로 작업을 처리할까?

1. 데이터의 무결성을 유지하기 위해 (즉 부정합을 방지하고자)

DB서버에 여러가지 클라이언트들이 동시에 들어와서 작업을 처리하는데 이때 데이터들의 일관성이 깨질수 있다.

2. 직렬화 기능으로 작업을 하나씩 순차적으로 진행하기 위해

하나하나 한번에 하나의 프로세스를 처리하도록 한다.

그런데 이러면 효율이 너무 떨어지기 때문에 트랜잭션이라는 작업단위로 처리하는것.

트랜잭션은 다수의 클라이언트가 사용해서 여러개의 트랜잭션이 동시에 수행될 수 있음(동시성


4가지 특징을 가지고 있습니다. (ACID)
1. 원자성 (Atomicity)

트랜잭션의 모든 연산은 모두 처리되거나, 처리되지 않아야 합니다.(All or Nothing)

작업의 단위의 일부분만 실행하지 않는다.
2. 일관성.( Consistency )

트랜잭션이 성공적으로 수행되고 나면 데이터타입이 일관적으로 유지되어야 합니다.

3. 고립성 ( Isolation )

트랜잭션이 수행되고 있는 동안에는 다른 트랜잭션이 끼어들 수 없습니다.

트랜잭션끼리는 서로 간섭할 수 없다.
4. 지속성  ( Durability )

트랜잭션이 성공적으로 수행되면 그 결과는 영구적으로 반영되어야 합니다.

Commit을 하면 현재 상태는 영원히 보장됨

 

이런 트랜잭션의 특징을 어떻게 보장하는가? 어떻게 알 수 있나?

1. 원자성/지속성 : Commit과 Rollback으로 처리

트랜잭션이 정상적으로 수행되지 않았을때 이전상태로 돌아가기 위해 Rollback수행

트랜잭션이 성공적으로 수행되었을 때 영구적으로 저장하기 위해 Commit 수행

 

2. 일관성 : 제약조건으로 처리

트랜잭션 수행 전후에 데이터의 모든 제약조건을 만족시켜서 데이터타입을 유지함

1)개체무결성 제약조건 : 기본키값은 null값을 가질 수 없다는 조건

2) 도메인무결성 제약조건 : 정의된 도메인 형식에 맞추야한 다는 조건

3) 참조무결성 제약조건 : 참조관계일떄 외래키를 가져야하는 조건

그래서 이벤트와 조건이 발생했을때 자동으로 트리거를 통해 보장함

+트리거/프로시저 차이점  https://pearlluck.tistory.com/18

 

PLSQL 트리거/프로시져/함수차이점

PL/SQL SQL을 확장한 절차적인 언어 오라클에서 제공 쿼리문을 하나씩 수행하는 SQL과 다르게 프로시져, 트리거를 통해 반복적으로 수행할 수 있습니다. 구조 (DECLARE) : 변수,상수,커서, 사용자 지정 예외 선언..

pearlluck.tistory.com

 

3. 고립성 : LOCK방식으로 처리

고립성을 높이면 동시성이 떨어지고, 동시성을 높이면 데이터 무결성 보장이 어려움(trade-off관계)

그래서 동시성을 제어하는 방식이 필요 : 이걸 lockr기능으로 하는것!

동시에 같은 데이터에 접근하지 못하도록 제어해서

동시성을 최대화 하면서 데이터의 무결성을 유지하는 방법 

다만, 트랜잭션을 아무것도 수행할 수 없는 데드락상태가 될 수 도 있다.

+데드락 : https://pearlluck.tistory.com/16

 

데드락(교착상태)

프로세스가 공유자원을 동시에 할당하려고 할 때 무한정으로 대기하는 상태 언제 발생하는가? 다음과 같은 4가지 조건을 모두 만족하면 교착상태가 발생한다. 1. 상호배제 조건 하나의 프로세스나 스레드만 공유자..

pearlluck.tistory.com

 

 

728x90
반응형