SQL

[SQL | ORACLE]- 트랜잭션(transaction), COMMIT, ROLLBACK이란?

빛날희- 2021. 5. 12. 00:58

▷트랜잭션:

 

트랜잭션이란 간단히 말해 하나의 업무 단위를 해결하기 위해 실행되어야하는 명령어 단위이다. 


예를들어 인터넷 쇼핑 주문이라는 업무단위가 있다고 해보자. 이 업무를 처리하기 위해서 우선 고객의 주문을 받는 UPDATE와 해당 주문을 주문서에 올리는 UPDATE 두가지의 명령어 단위가 필요하다. 주문을 받고 주문서에 올리는 명령어를 모두 처리하기 전까지 고객에게 주문이 완료되었다는 메세지를 띄워선 안될것이다. 즉 '인터넷주문' 업무적 단위를 처리하기 위한 모든 물리적 명령어 단위가 처리되었을 때 사용자에게 주문완료 메세지를 보여줄 수 있는 것이다. 이때 한번에 처리되어야 하는 단위를 transaction이라고 한다.

 

 

트랜잭션을 위해선 두가지의 조건을 만족해야 한다. 

 

 

1. 모든 명령어 단위가 실행되기 전까진 사용자에게 보이지 않아야한다. 그렇기 때문에 SQL의 영구저장소가 아닌 임시저장소에서 먼저 명령어 단위가 테스트 되어야한다. 

 

2. 한 세션의 명령어 단위가 완료되기(rollback 혹은 commit)전까진 다른 세션에서 또 다른 명령을 하지 못하도록 LOCK을 걸어놓아야한다. 즉 한 세션에서 변경된 내용이 영구저장소로 저장하지 못하도록 아예 취소되거나 영구저장소에 반영되지 않았으면 LOCK기능이 자동으로 발현되어 다른 세션에서 어떠한 명령도 하지 못할 것이다. 명령어 단위가 완료되면 자동으로 UNLOCK되어 다른 세션에서의 명령어처리가 가능해진다. 

 


▷COMMIT:

 

commit이란 임시저장소에서 변경한 내용을 영구저장소에 반영하도록 하는 명령어이다. UPDATE ALTER등을 통해 변경한 후 변경된 내용을 영구저장소에 저장할 때 commit; 명령어를 사용할 수 있다. commit을 하면 다른 세션에서도 변경된 내용을 확인할 수 있다. 

 


▷ROLLBACK:

 

rollback이란 임시저장소에서 변경한 내용을 영구저장소에 반영하지 않고 취소하는 명령어이다. 테이블 등을 임시저장소에서 UPDATE와 같은 명령어로 변경을 해도 rollback; 명령어를 입력하면 영구저장소에 이를 저장하지 않고 명령단위를 완료시킬 수 있다. 

 

commit과 rollback 실행 예시