SQL
[Oracle] auto commit, auto rollback, savepoint
ㄷㅐ장님
2021. 12. 31. 12:19
자동 commit이 발생할 때
-sqlplus에서 다른 유저로 접속 connect(conn)할 때
-sqlplus에서 exit를 수행해서 종료할 때
-DDL과 DCL을 같은 transaction에서 사용하면 auto commit 된다.
DDL(create, alter, drop, rename , truncate, comment)
DCL(grant, revoke)
delete from emp; --transaction 시작
select * from emp; --확인
create table dept
as select * from departments; --transaction 종료 내부적으로 auto commit 수행된다.
select * from dept;
select * from emp;
rollback; --delete 취소를 하려고 하지만 위에서 auto commit이 수행되었기 때문에 취소는 의미가 없다.
자동 rollback이 발생할 때
-sqlplus에서 그냥 창닫기(비정상적인 종료)를 할 때
-네트워크 장애가 발생하는 경우
-컴퓨터가 비정상적으로 종료될 때
⇒따라서 꼭꼭!!
-DML작업을 수행한 후 명시적으로 transaction을 종료하는 습관을 갖자
-정확하게 commit, rollback을 해야할 지 명시적으로 꼭 수행하는 습관을 갖자
savepoint
: DML작업시에 rollback을 도와주는 표시자.
-transaction을 종료(commit, rollback)하면 자동으로 사라짐.
-유일한 이름으로만 만들어야함
insert into emp_20(employee_id, last_name) --transaction 시작
values(300,'홍길동');
select * from emp_20;
savepoint a;
update emp_20 set last_name = '김감자'
where employee_id =201;
select * from emp_20;
savepoint b;
delete from emp_20
where employee_id = 202;
select * from emp_20;
--(rollback; : transaction 시작부분으로 rollback 된다.)
rollback to b; --표시자 b 이하에 있는 delete만 취소된다. insert, update 취소X
commit; --insert,update 영구히 저장, transaction 종료