DB, 인프라/Oracle

트랜젝션, 튜플, 롤백, 정규화 비정규화

IT여행 2023. 2. 2. 16:28

 

 

1. 트랜젝션이란


: 하나의 단위로 수행되길 바라는 쿼리의 묶음 (= 업무수행단위, 논리적 수행단위)

다음의 한쌍(두개) 쿼리를 일괄공개에 관한 쿼리로 모두 수행하여야 업무로직을 판단할수 있게 된다.

UPDATE NOTICE SET PUB=1 WHERE ID IN (2,3,6)
UPDATE NOTICE SET PUB=0 WHERE ID IN (1,4,5,7,8,9,10)

공지사항게시판 NOTICE테이블의 PUB 컬럼이 0이면 게시물 공개,  PUB 컬럼이 1이면 비공개 처리하는 논리단위로 만들어서 두 쿼리모두 수행해야함. 

원자성 : 두개가 같이 잘 작동
고립성 : 조작, 조회가 될텐데, 어느하나가 진행중일때 끼어들지 못하도록 독립성을 확보
일관성 : 제약조건등을통해 , 결함 X 이 작동해야함. 
지속성 : DB를 다루다보면 rollback / commit을 다루게 되는데 COMMIT 은 이거 잘 되니 적용하겠다라는건데 두개가 따로 잘 작동 

atomicity - 중요하게 볼것 
isolation   - 중요하게 볼것 
consistency - 당연히 지켜져야하는것 ( 제약조건등을 통해) 
durability  - 당연히 지켜져야하는것 ( commit등을 통해) 



2. 트랜젝션  ex) 계좌이체 과정을 통해 다음의 키워드를 정리한다.  

두개의 session DB

임시테스트 단계의 명령어:  rollback 과 commit

lock과 unlock

예를들어, 계좌이체 과정을 생각해보자.
이체시 한쪽 계좌는 차감되고, 다른한쪽 계좌는 금액증가가 된다.
둘중 하나만 UPDATE가 잘 되면 금전계산에 문제가 발생한다 ( 마이너스통장인데 다른한쪽에 금액증가는 일어날 경우 ).
그래서 두 쿼리가 모두 잘 작동해야하는 쿼리묶음으로 동작해야만 하는 Transaction 사례로 볼 수 있다.

 두개의 session(= 즉, 두 사용자 ) DB가 존재한다고 보자. 
트렌젝션이란 DB 임시테스트 공간을 가지는데 한 세션DB에서  update등 쿼리로직 수행했을때 반대편 세션에 바로 적용이 되지 않고
lock 에서 unlock의 과정을 걸쳐서 실제 수행이 바로 되지 않게 막아둔다.

임시테스트 상태에서는
rollback 명령어로 테스트쿼리 취소하거나
commit 명령어로 쿼리 테스트단계에서 최종 실제사용하는 단계로 넘기게 된다.