개발 지식/[DBMS] Oracle

[Oracle] 트랜잭션(transaction)의 개념 및 TCL

devGSP 2022. 6. 13. 08:00
반응형
이 게시물은 Database GUI Oracle SQL Developer의 아래 버전 정보를 기준으로 작성되었습니다.

Java(TM) 플랫폼 : 1.8.0_321
Oracle IDE : 4.1.5.21.78

 

트랜잭션(transaction)의 개념 및 TCL

 

설명

 

이전 UPDATE 관련 게시물(링크)에서 ROLLBACK이라는 명령어를 사용하여 수행한 DML을 다시 되돌렸다. 이는 트랜잭션을 취소할 때 사용하는 명령어로 TCL(Transaction Control Language) 중 하나이다.

 

트랜잭션(transaction)이란 더 이상 분할할 수 없는 최소 수행 단위를 말한다. 즉 이러한 트랜잭션 안에 여러 명령어들이 있다면, 모두 한 번에 수행하여 작업을 완료하거나, 모두 수행하지 않는 상태인 것이다. 예를 들어 보자.

 

10,000원이 든 계좌 A에서 0원이 든 계좌 B로 돈 10,000원을 입금한다.

위의 과정을 위해 아래와 같이 쿼리를 작성했다고 가정하자.

-- query1
UPDATE 계좌
   SET 잔액 = 0
 WHERE 계좌번호 = A;
 
-- query2
UPDATE 계좌
   SET 잔액 = 10000
 WHERE 계좌번호 = B;

 

그런데 이때 query1의 정상 작동한 후, query2가 동작하지 않으면 10000원은 먼지가 되어 버리는 것이다.

이때 두 과정 모두 정상 동작이 되지 않았다면 트랜잭션을 취소하여야 하는데, 이때 사용하는 TCL이 ROLLBACK 명령어이다. 트랜잭션을 반영하고 싶을 경우에는 COMMIT 명령어를 사용한다.

 

 

사용 예시

 

우선 테스트해 볼 테이블을 하나 생성한다.

CREATE TABLE TB_TEMP
    AS SELECT *
         FROM DEPT;
         
SELECT * FROM TB_TEMP;

tcl_q1

 

그리고 아래의 쿼리문들을 실행하자.

INSERT INTO TB_TEMP VALUES(99, 'HACKING', 'SEOUL');
UPDATE TB_TEMP SET DNAME = 'SECURITY' WHERE DEPTNO = 30;
DELETE FROM TB_TEMP WHERE LOC = 'BOSTON';
SELECT * FROM TB_TEMP;

tcl_q2

 

테이블의 데이터 변동을 확인했으면 이제 아래 명령어를 실행시켜 보자.

ROLLBACK;

SELECT * FROM TB_TEMP;

tcl_q3

 

ROLLBACK 명령어를 통해 다시 이전 상태로 복구된 것을 확인할 수 있다.

이번에는 COMMIT 명령어를 먼저 사용해 보기 위해 아래 쿼리문들을 순차적으로 진행하자.

INSERT INTO TB_TEMP VALUES(99, 'HACKING', 'SEOUL');
UPDATE TB_TEMP SET DNAME = 'SECURITY' WHERE DEPTNO = 30;
DELETE FROM TB_TEMP WHERE LOC = 'BOSTON';

COMMIT;
ROLLBACK;

SELECT * FROM TB_TEMP;

tcl_q4

 

COMMIT 명령어를 통해 트랜잭션을 반영했기 때문에 ROLLBACK 명령어로 복구가 되지 않는 것을 확인할 수 있다.

반응형