728x90
Transaction (트랜잭션)
- 데이터 처리의 한 단위
- 오라클에서 발생하는 여러 개의 SQL 명령문(DML)들을 하나의 논리적인 작업단위로 처리
- 하나의 트랜잭션은 ALL- Or- Nothing 방식으로 처리
- 목적: 데이터의 일관성을 유지하면서 안정적으로 데이터를 복구시키기 위해서
트랜잭션 제어 명령어
COMMIT;
ROLLBACK;
SAVEPOINT sp1;
-
COMMIT
- 저장되지 않은 모든 데이터를 데이터베이스에 저장하고 현재의 트랜잭션을 종료하라는 명령어.
- 커밋하면 트랜잭션의 처리과정이 모두 반영되며 하나의 트랜잭션 과정이 끝남
- 트랜잭션이 발생하는 경우 새롭게 생성되거나 갱신된 데이터들이 물리적으로 영구히 저장됨
- DDL (CREATE , DROP, ALTER, RENAME, TRUNCATE)은 AutoCommit
- 정상적인 종료시에도 commit작업을 수행. 예) exit종료
-
ROLLBACK
- 저장되지 않은 모든 데이터 변경사항(DML)을 취소하고 현재의 트랜잭션을 끝내라는 명령
- 트랜잭션으로 인한 하나의 묶음처리가 시작되기 이전의 상태로 되돌려지는 것
- 이전상태로 되돌아가 지금까지 수행했던 데이터베이스의 변경을 모두 무효화
- 비정상적인 종료시 rollback 작업을 수행. 예) 우측 상단 X버튼 클릭시
-
SAVEPOINT 저장점명;
SAVEPOINTx
-- 20번 부서와 40번 부서를 삭제
DELETE FROM dept3 WHERE deptno IN(20,40);
-- 30번 부서의 이름을 '영업부'로 변경. (DML)
UPDATE dept3 SET dname='영업부' WHERE deptno = 30;
-- 되돌리기
ROLLBACK;
====> 트랜잭션 시작 <=====
-- 10, 20, 30번 부서를 삭제
DELETE FROM dept3 WHERE deptno IN(10,20,30);
-- 물리적인 반영(DML을 실제 DataBase에 적용)
COMMIT;
====> 트랜잭션 끝 <=====
====> 트랜잭션 시작 <=====
ROLLBACK;
DELETE FROM dept4 WHERE deptno=30;
SAVEPOINT sp1;
DELETE FROM dept4 WHERE deptno=10;
SAVEPOINT sp2;
DELETE FROM dept4 WHERE deptno=40;
ROLLBACK to sp2; --40번을 지우기 전
ROLLBACK to sp1; --10번을 지우기 전
ROLLBACK --30번을 지우기 전
-- ROLLBACK to sp2; 에러발생. 이미 작업취소한 내용을 다시 할 수 없음
'Web develop > SQL' 카테고리의 다른 글
[SQL/ORACLE] 숫자 함수, 문자 함수 (0) | 2019.05.28 |
---|---|
[SQL/ORACLE] SELECT절 (실행순서, 연산자, WHERE, ORDER BY) (0) | 2019.05.27 |
[SQL/ORACLE] DML (0) | 2019.05.23 |
[SQL/ORACLE] DDL (0) | 2019.05.22 |
[SQL/ORACLE] SQL 문법 종류 (DDL, DML, DCL, DQL, TCL) (0) | 2019.05.22 |