[Oracle] 트랜잭션 중간 단계에서 SAVEPOINT지정하기

CODEDRAGON Development/Database

반응형

 

 

Q1: 트랜잭션 중간 단계에서 SAVEPOINT지정하기

 


 

 

TODO 1: dept테이블 구조와 내용을 복사한 새로운 부서테이블(dept11)생성하기

CREATE TABLE dept11

AS

SELECT * FROM dept;

 


 

 

 

TODO 2: 생성된 테이블의 내용 확인하기

SELECT * FROM dept11;

 


 

 

TODO 3: 부서번호가 40번인 부서정보를 삭제한 후 COMMIT을 수행하여 새롭게 트랜잭션을 시작합니다.

DELETE FROM dept11

WHERE deptno=40;

 

SELECT * FROM dept11;

 

COMMIT;

 


 

 

TODO 4: 부서번호가 30번인 부서정보를 삭제합니다.

DELETE FROM dept11

WHERE deptno=30;

 

SELECT * FROM dept11;

 


 

 

TODO 5: SAVEPOINT SP1을 설정합니다.

SAVEPOINT sp1;

 


 

 

 

TODO 6: 부서번호가 20번인 부서정보를 삭제합니다.

DELETE FROM dept11

WHERE deptno=20;

 

SELECT * FROM dept11;

 


 

 

TODO 7: SAVEPOINT SP2을 설정합니다.

SAVEPOINT sp2;

 


 

 

 

TODO 8: 부서번호가 10번인 부서정보를 삭제합니다.

DELETE FROM dept11

WHERE deptno=10;

 

SELECT * FROM dept11;

 


 

 

ROLLBACK Senario

부서번호 10번의 자료 삭제하기 바로 전으로 되돌아가려면 어떻게 하면 될까요?

부서번호 20번의 자료 삭제하기 바로 전으로 되돌아가려면 어떻게 하면 될까요?

부서번호 30번의 자료 삭제하기 바로 전으로 되돌아가려면 어떻게 하면 될까요?

지금 바로 ROLLBACK명령을 내리게 되면 이전 COMMIT지점으로 되돌아가므로 10, 20, 30번 부서정보의 삭제가 모두 취소됩니다.

 


 

TODO 9: 부서번호가 10번인 부서를 삭제하기 이전으로 되돌리기

10번 부서를 삭제하기 전에 SAVEPOINT SP2를 설정하였으므로 이곳까지만 ROLLBACK하면 원하는 결과를 얻을 수 있습니다.

 

ROLLBACK TO sp2;

 

SELECT * FROM dept11;

 

SAVEPOINT sp2지점으로 이동되어 10번 부서정보를 삭제하기 이전으로 되돌아간것을 확인할 수 있습니다.


 

 

TODO 10: 부서번호가 20번인 정보를 삭제하기 바로 전으로 되돌리려면 SAVEPOINT sp1까지만 ROLLBACK하면 됩니다.

 

ROLLBACK TO sp1;

 

SELECT * FROM dept11;

 


 

 

TODO 11: 트랜잭션 처음 시점으로 ROLLBACK하기

 

ROLLBACK;

 

SELECT * FROM dept11;

 

지금까지 COMMIT, ROLLBACK, SAVEPOINT ROLLBACK TO의 사용법에 대해 알아보았습니다.

큰 작업 단위는 COMMIT을 사용하여 트랜잭션으로 묶어두고, 트랜잭션 안에서의 작은 단위는 SAVEPOINT를 설정하는 것이 좋습니다.