본문 바로가기
DBMS/ORACLE

[ORACLE] 오라클_트랜잭션 명령어( SAVEPOINT | ROLLBACK TO )

by 썸머워즈 2019. 3. 6.
반응형

SAVEPOINT, ROLLBACK TO

ROLLBACK을 사용하게 되면 데이터를 조작한 작업 전체가 되돌아가게 된다.

부분적으로만 돌아가면 되는데 트랜잭션 작업 단위에 속한 모든 작업이 되돌아가는 불상사가 발생한다.

 

이럴 때 사용할 수 있는 명령어가 SAVEPOINT와 ROLLBACK TO 명령어이다.

 

▷ 구문

SAVEPOINT [세이브 포인트 명]
ROLLBACK TO [저장된 세이브 포인트 명]

게임 같은 거를 할 때 세이브포인트를 저장해 그 시점으로 되돌아간 경험이 한 번쯤은 있을 텐데,

마찬가지로 저장된 그 순간으로 되돌아가는 기능이라 생각하면 된다.

 

SAVEPOINT로 저장하고 ROLLBACK TO로 저장된 세이브포인트로 돌아가는 것이다.

 

예를 한번 들어보자.

INSERT INTO oracleStudy VALUES(3,'TEST1');
 
SAVEPOINT onePoint;
 
INSERT INTO oracleStudy VALUES(4,'TEST1');
 
SAVEPOINT twoPoint;

값을 각각 하나씩 집어넣고 그 사이사이에 세이브 포인트를 지정했다.

DELETE FROM oracleStudy WHERE ename='TEST1';

-- 아무것도 없음
SELECT * FROM oracleStudy WHERE ename='TEST1';

당연히 값을 지우고 나서 SELECT를 해주면 아무 값도 출력되지 않는다.

 

자 여기서 이제 첫 번째 세이브 포인트인 onePoint로 ROLLBACK TO를 해보면 어떻게 될까?

ROLLBACK TO onePoint;
 
SELECT * FROM oracleStudy WHERE ename='TEST1';
oracleNo  ename 
 3  TEST1

해당 세이브 포인트로 돌아가기 때문에 그 이후에 이루어진 작업들은 취소가 되는 것이다. (onePoint를 지정하고 나서 한번 더 INSERT를 했음에도 그 데이터를 들어가 있지 않다.)

 

이번에는 두 번째 세이브 포인트인 twoPoint로 ROLLBACK TO를 해보자.

ROLLBACK TO twoPoint;
 
SELECT * FROM oracleStudy WHERE ename='TEST1';
 oracleNo ename
3 TEST1
4 TEST1

두 개의 값이 INSERT 된 시점으로 ROLLBACk TO 하게 됐을 경우 당연히 두 개의 값이 선택된다.

이런 식으로 상황에 맞게 사용해주면 정말 유용한 기능이라고 생각된다.

반응형


댓글

TOP