일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 빅데이터분석기사 독학
- 빅분기
- TCP 채팅
- 노트패드++ 줄바꿈
- 빅데이터분석기사
- 원씽 책
- xml 파싱 방법
- async
- 원씽 후기
- async false
- Notepad 줄바꿈
- 빅분기 독학
- 책 원씽
- 자바 채팅 프로그램
- 간단한 채팅 프로그램
- 빅분기 필기
- Notepad++ 줄바꿈
- ajax 동기식
- 빅데이터분석기사 필기
- 원씽 내용
- TCP Socket
- ajax 비동기식
- 노트패드 줄바꿈
- The OneThing
- 원씽 독후감
- 자바스크립트 undefined
- 자바 채팅
- 동기식 비동기식
- dom sax 장단점
- dom sax 차이점
- Today
- Total
SooBlending
[Oracle] 트랜잭션(Transaction) COMMIT/ROLLBACK 본문
<트랜잭션> Transaction
- 데이터 처리의 한 단위
- 오라클에서 발생하는 여러개의 SQL 명령문(DML)들을 하나의 논리적인
작업단위로 처리하는데 이를 트랜잭션이라 함.
- 하나의 트랜잭션은 All-or-Nothing방식으로 처리.
- 목적 : 데이터의 일관성을 유지하면서 안정적으로 데이터를 복구시키기 위해서.
- 트랜잭션 제어 명령어 : commit, rollback, savepoint
1. COMMIT
- 저장되지 않은 모든 데이터를 데이터베이스에 저장하고
현재의 트랜잭션을 종료하라는 명령어.
- 커밋하면 트랜잭션의 처리과정이 모두 반영되며 하나의 트랜잭션 과정이 끝남.
- 트랜잭션이 발생하는 경우 새롭게 생성되거나 갱신된 데이터들이
물리적으로 영구히 저장됨.
- DDL(create,drop,alter,rename,truncate)은 AutoCommit!!
- 정상적인 종료시에도 commit작업을 수행
예) exit종료
2. ROLLBACK [TO SAVEPOINT명]
- 저장되지 않은 모든 데이터 변경사항(DML)을 취소하고 현재의 트랜잭션을
끝내라는 명령.
- 트랜잭션으로 인한 하나의 묶음처리가 시작되기 이전의 상태로 되돌려지는 것.
- 이전상태로 되돌아가 지금까지 수행했던 데이터베이스의 변경을
모두 무효화.
- 비정상적인 종료시 rollback작업을 수행.
예) 우측 상단 X버튼 클릭시
drop table dept3;
create table dept3
as select * from dept;
==================================================================
SQL> select * from dept3;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
문제) 20번 부서와 40번 부서를 삭제하시오.
delete from dept3
where deptno IN (20,40);
SQL> select * from dept3;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
30 SALES CHICAGO
문제) 30번 부서의 이름을 '영업부'로 변경하시오.
update dept3
set dname='영업부'
where deptno=30;
SQL> select * from dept3;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
30 영업부 CHICAGO
ROLLBACK;
-- 트랜잭션내의 모든 DML작업 취소.
SQL> select * from dept3;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
문제) 10,20,30번 부서를 삭제하시오.
delete from dept3
where deptno in (10,20,30);
SQL> select * from dept3;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
40 OPERATIONS BOSTON
COMMIT; -- 물리적인 반영
ROLLBACK;
SQL> select * from dept3;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
40 OPERATIONS BOSTON
<SAVEPOINT>: 저장점
형식) SAVEPOINT 저장점명;
drop table dept4;
create table dept4
as select * from dept;
SQL> select * from dept4;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
- 30번 부서삭제
delete from dept4
where deptno=30;
SQL> select * from dept4;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
40 OPERATIONS BOSTON
=================================> SAVEPOINT
savepoint sp1;
- 20번 부서삭제
delete from dept4
where deptno=20;
SQL> select * from dept4;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
40 OPERATIONS BOSTON
=================================> SAVEPOINT
savepoint sp2;
- 10번 부서삭제
delete from dept4
where deptno=10;
SQL> select * from dept4;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
40 OPERATIONS BOSTON
SQL> rollback to sp2;
SQL> select * from dept4;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
40 OPERATIONS BOSTON
SQL> rollback to sp1;
SQL> select * from dept4;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
40 OPERATIONS BOSTON
SQL> rollback;
SQL> select * from dept4;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
drop table dept4;
create table dept4
as select * from dept;
delete from dept4
where deptno=40;
savepoint sp3;
delete from dept4
where deptno=20;
commit;
rollback to sp3;
ORA-01086: savepoint 'SP3' never established in this session
or is invalid
==> commit 이전에 정의된 savepoint는 사용할 수 없음!!
'Programming > DataBase' 카테고리의 다른 글
[Oracle] PL/SQL (0) | 2017.11.09 |
---|---|
[Oracle] 시퀀스(Sequence) (0) | 2017.11.09 |
[Oracle] 뷰 (View) 단일뷰/복합뷰 (0) | 2017.11.08 |
[Oracle] 제약조건 (Constraint) (2) | 2017.11.07 |
[Oracle] Merge 테이블 합치기 (2) | 2017.11.07 |