[Oracle] 트랜잭션
<문1>데이터베이스에서 데이터를 관리(insert,update,delete,select)
여러개의 SQL명령어를 사용하게 되는데 이를 하나의 작업단위로 설정
ex) 계좌이체(A은행---->B은행)
-1000 ---->+1000
수정 입금(=insert)
update insert=====>작업단위
정전
트랜잭션의 처리요건=>ALL or Nothing (원자성)
반드시 처리가 되든지 or 처리 X
commit or rollback
COMMIT
모든 작업들을 정상적으로 처리 데이터베이스에 모두 반영--->메모리에 저장=>테이블에 적용이 된다.
변경된 내용을 모두 영구 저장-->테이블에 저장(insert,update,delete)
(주의할점)=>** 자동 commit이 되는 경우 **
1.create table,create view~ ,alter~,drop~으로 시작하는 문장(DDL)은 복구불가
DCL문(grant~,revoke) 사용권한 복구불가
2.insert,update,delete->commit을 입력하지 않아도 exit(정상종료)
메모리상에 미처 저장하지 못했던 모든 부분->테이블에 저장시켜주고
종료
ROLLBACK
commit이 되면 그 작업이 끝난상태로 취급->취소가 불가능
처리 과정에서 발생한 변경 사항을 취소->메모리상에 저장된 결과물
(insert,update,delete)
자동 rollback
->비정상적인 종료(정전),다운
실행 과정
SQL> create table b_dept2 as select * from dept;
테이블이 생성되었습니다.
SQL> select * from b_dept2;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> insert into b_dept2 values(50, 'SUPPORT', 'KWANGJU');
1 개의 행이 만들어졌습니다.
SQL> select * from b_dept2;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 SUPPORT KWANGJU
SQL> commit;
커밋이 완료되었습니다.
SQL> insert into b_dept2 values(60, 'TESTING', 'SEOUL');
1 개의 행이 만들어졌습니다.
SQL> select * from b_dept2;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 SUPPORT KWANGJU
60 TESTING SEOUL
6 개의 행이 선택되었습니다.
SQL> savepoint A;
저장점이 생성되었습니다.
SQL> update b_dept2 set dname='IMSI' where deptno=50;
1 행이 갱신되었습니다.
SQL> select * from b_dept2;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 IMSI KWANGJU
60 TESTING SEOUL
6 개의 행이 선택되었습니다.
SQL> savepoint B;
저장점이 생성되었습니다.
SQL> select * from b_dept2;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 IMSI KWANGJU
60 TESTING SEOUL
6 개의 행이 선택되었습니다.
SQL> delete from b_dept2 where deptno=40;
1 행이 삭제되었습니다.
SQL> select * from b_dept2;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
50 IMSI KWANGJU
60 TESTING SEOUL
SQL> rollback to B;
롤백이 완료되었습니다.
SQL> select * from b_dept2;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 IMSI KWANGJU
60 TESTING SEOUL
6 개의 행이 선택되었습니다.
SQL> rollback;
롤백이 완료되었습니다.
SQL> select * from b_dept2;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 SUPPORT KWANGJU