다연이네

[days17] 트랜잭션(Transaction), SavePoint 본문

Oracle

[days17] 트랜잭션(Transaction), SavePoint

 다연  2020. 11. 23. 19:48
반응형

transaction 
- 트랜잭션(Transaction)이란 일의 처리가 완료되지 않은 중간 과정을 취소하여 일의 시작 전 단계로 되돌리는 기능이다. 
- 즉, 결과가 도출되기까지의 중간 단계에서 문제가 발생하였을 경우 모든 중간 과정을 무효화하여 작업의 처음 시작 전 단계로 되돌리는 것이라 할 수 있다.  
- 일의 완료를 알리는 commit과 일의 취소를 알리는 rollback이 쓰인다.

 

예) 계좌 이체 
1) A UPDATE 
2) B UPDATE 완전히 다 되던지 완전히 안되던지

 

 

--userenv : 사용자환경

select userenv('sessionid')
from dual;

scott1

스캇 계정의 다른 데이터베이스를 접속하면 다른 숫자가 뜸

scott2

select ename,job 
from emp 
where ename='MILLER';

scott1 = scott2 동일

scott1에서 MILLER의 JOB을 update 시키면

select ename,job 
from emp 
where ename='MILLER';

update emp 
set job='Manager' 
where ename='MILLER';

scott1
scott2

scott2에서는 update가 안되어있다.

그 후에 scott2에서 update 하면 ? 

update emp 
set job='SALESMAN' 
where ename='MILLER';

계속 돌기만하고 결과 값이 출력이 안된다.

scott1로 가서 rollback;을 하자마자 출력된다.

 + scott2에서도 rollback 해주기~

 

 

SavePoint

SAVEPOINT는 트랜잭션 내에 세이브포인트를 만들 수 있게 해준다.

하나의 트랜잭션 내에 여러 개의 세이브포인트를 만들 수 있으며, ROLLBACK TO 세이브포인트 문을 이용하여 큰 규모의 트랜잭션 내에서 명령들의 특정한 그룹만 롤백할 수 있다.

--첫번째 DML문 수행
insert into dept values (50, '부서명', '지역명');
--a세이브포인트
savepoint apoint;

update dept
set dname = 'QC2'
where deptno=70;
--b세이브포인트
savepoint bpoint;

 delete from dept
 where deptno = 70;
 
 
select * from dept;

rollback; --savepoint 없으면 insert/update/delete 모두 롤백됨
rollback to savepoint apoint;

 

 

반응형
Comments