-- 1. 트랜잭션
-- 2. COMMIT과 ROLLBACK
-- 3. 자동 커밋
-- 4. 트랜잭션을 작게 분할하는 SAVEPOINT
-- 01. 트랜잭션
-- 데이터베이스에서 트랜잭션(Transaction)은 데이터 처리의 한 단위입니다.
-- 오라클에서 발생하는 여러 개의 SQL 명령문들을 하나의 논리적인 작업
-- 단위로 처리하는데 이를 트랜잭션이라고 합니다.
-- 여러 개의 명령어의 집합이 정상적으로 처리되면 정상 종료하도록 하고
-- 여러 개의 명령어 중에서 하나의 명령어라도 잘못되었다면 전체를 취소해버립니다.
-- 여러 개의 명령어의 집합이 정상적으로 처리되면 정상 종료하도록 하고
-- 여러 개의 명령어 중에서 하나의 명령어라도 잘못되었다면 전체를 취소해버립니다.
-- 데이터베이스에서 작업의 단위로 트랜잭션이란 개념을 도입한 이유는
-- 데이터의 일관성을 유지하면서 안정적으로 데이터를 복구시키기 위해서 입니다.
-- 트랜잭션 제어를 위한 명령어(Transaction)
-- COMMIT
-- SAVEPOINT
-- ROLLBACK
-- 앞장에서 데이터를 추가, 수정, 삭제하는 작업들을 학습했는데, 이러한
-- 데이터를 조작하는 명령어인 DML(Data Manipulation Language)은
-- 이들이 실행됨과 동시에 트랜잭션이 진행됩니다.
-- 이들 DML 작업이 성공적으로 처리되도록 하기 위해 COMMIT 명령을
-- 취소하기 위해서는 ROLLBACK 명령으로 종료한다.
-- COMMIT은 모든 작업들을 정상적으로 처리하겠다고 확정하는 명령어로
-- 트랜잭션의 처리 과정을 데이터베이스에 모두 반영하기 위해서 변경된
-- 내용을 모두 영구 저장합니다.
-- COMMIT 명령어를 수행하게 되면 하나의 트랜잭션 과정을 종료하게 됩니다.
-- DML( select, delete, update, insert)
-- DDL( create, alter, drop, rename, truncate..)
-- DCL( grant, revoke)
-- ROLLBACK은 작업 중 문제가 발생되어서 트랜잭션의 처리 과정에서
-- 발생한 변경사항을 취소하는 명령어 입니다.
-- ROLLBACK 명령어 역시 트랜잭션 과정을 종료하게 됩니다.
-- ROLLBACK은 트랜잭션으로 인한 하나의 묶음 처리가 시작되기 이전의 상태로 되돌립니다.
-- 트랜잭션은 여러 개의 물리적인 작업(DML 명령어)들이 모여서
-- 이루어지는데 이러한 과정에서 하나의 물리적인 작업이라도 문제가
-- 발생하게 되면 모든 작업을 취소해야 하므로 이들을 하나의 논맂거인
-- 작업 단위(트랜잭션)로 구성해 놓는다.
-- 문제가 발생하게 되면 이 논리적인 작업 단위를 취소해 버리면 되기 때문입니다.
-- 트랜잭션은 마지막으로 실행항 커밋(혹은 롤백)명령 이후부터 새로운 커밋(혹은 롤백), 명령을 실행하는 시점까지
-- 수행된 모든 DML 명령들을 의미합니다.
-- ALL-OR-Nothing 방식으로 DML 명령어들을 처리합니다.
-- COMMIT과 ROLLBACK은 다음과 같은 장점이 있습니다.
-- COMMIT 명령어과 ROLLBACK 명령어의 장점
-- 데이터 무결경성이 보장됩니다.
-- 영구적인 변경 전에 데이터의 변경 사항을 확인할 수 있습니다.
-- 논리적으로 연관된 작업을 그룹화할 수 있습니다.
-- <정리>
-- COMMIT 명령어
-- 1. Transaction(INSERT, UPDATE, DELETE)작업 내용을 실제 DB에 저장한다
-- 2. 이전 데이터가 완전히 UPDATE 됩니다.
-- 3. 모든 사용자가 변경된 데이터의 결과를 볼 수 있습니다.
-- ROLLBACK 명령어
-- 1. Transaction(INSERT, UPDATE, DELETE)작업 내용을 취소합니다.
-- 2. 이전 COMMIT 한 곳 까지만 복구합니다.
-- 자동 COMMIT 명령과 자동 ROLLBACK 명령이 되는 경우
-- SQL * PLUS가 정상 종료되었다면 자동으로 COMMIT되지만, 비정상
-- 종료되었다면 자동으로 ROLLBACK 합니다.
-- DDL과 DCL 명령문이 수행된 경우 자동으로 COMMIT 됩니다.
-- 정전이 발생했거나 컴퓨터 Down시(컴퓨터의 전원이 끊긴)자동으로
-- ROLLBACK 됩니다.
-- <실습하기> 롤백으로 이전으로 복구하기.
drop table dept01;
-- DDL은 트랜잭션 자동으로 적용..
rollback;
-- 해도 안돌아와아아 ~~
create table dept01
as (select * from dept);
delete from dept01;
-- DML은 COMMIT 이후 데이터 반영..
rollback;
-- DML은 돌아오는거야아아 ~
-- 부서번호 20번 삭제하고 자료확인 후 commit으로 영구저장하기.
delete from dept01 where deptno=20;
commit;
-- 영구저장(확정)
rollback;
-- 해도 안돌아와아아 ~~
-- <탄탄히 다지기>
-- 1.1 트랜잭션 내용을 실제 DB에 저장하기 위해 ______를 사용한다.
-- 1.2 트랜잭션 내용을 취소하기 위해서는 _______를 사용하여 이전 ______ 한 부분까지 변경 전 데이터로 복구한다.
select * from dept01;
-- 03. 자동 커밋
-- DDL 문에는 CREATE, ALTER, DROP, RENAME, TRUNCATE 등이 있습니다.
-- 이러한 DDL문은 자동으로 커밋(AUTO COMMIT)이 발생됩니다.
-- <실습하기> TRUNCATE 문 실패에 의한 자동 커밋
-- 1. 부서 테이블(DEPT03)에서 부서 번호가 20번인 부서를 삭제합니다.
delete from dept03 where deptno =20;
-- 2. TRUNCATE 문을 실행시키되 테이블 명을 일부러 잘못 적어서 에러를 유도합니다.
TRUNCATE table dept03;
-- TRUNCATE : 모든 데이터를 삭제해준다 DCL문, 자동커밋..
-- 3. 부서 번호가 20번인 부서를 다시 되살리기 위해서 ROLLBACK 명령문을 수행하여
rollback;
-- 도 TRUNCATE 문이 수행되면서 자동으로 커밋이 발생하였으므로 되살릴 수 없습니다.
select * from dept03;
-- 04. 트랜잭션을 작게 분할하는 SAVEPOINT
-- SAVEPOINT 명령을 써서 현재는 트랜잭션을 작게 분할할 수 있습니다.
-- 저장된 SAVEPOINT는 ROLLBACK TO SAVEPOINT 문을 사용하여
-- 표시한 곳까지 ROLLBACK할 수 있습니다.
-- 여러 개의 SQL 문을 실행을 수반하는 트랜잭션의 경우, 사용자가
-- 트랜잭션 중간 단계에서 세이브포인트를 지정할 수 있습니다.
-- 이 세이브포인트는 차후 롤백과 함께 사용해서 현재 트랜잭션 내의 특정
-- 세이브포인트까지 롤백할 수 있게 됩니다.
-- 다음은 SAVEPOINT로 특정 위치를 지정하기 위한 사용 형식입니다
-- SAVE LABEL_NAME;
-- SAVEPOINT로 지정해 놓은 특정 위치로 되돌아가기 위한 사용 형식입니다.
-- ROLLBACK TO LABEL_NAME;
-- <실습하기> 트랜잭션 중간 단계에서 세이브포인트 지정하기
-- 1. 부서번호가 40번인 부서를 삭제한 후에 커밋을 수행하여 새롭게 트랜잭션을 시작합니다.
delete from dept01 where deptno=40;
-- 2. 이번엔 부서번호가 30번인 부서를 삭제합니다.
delete from dept01 where deptno=30;
-- 3. 세이브포인트 C1를 설정한 후, 부서번호가 20번인 사원을 삭제합니다.
savepoint c1;
delete from dept01 where deptno=20;
-- 4. 세이브포인트 C2를 설정한 후, 부서번호가 10번인 사원을 삭제합니다.
savepoint c2;
delete from dept01 where deptno = 10;
select * from dept01;
-- 트랜잭션 중간 단계로 복구하기.
rollback to c1;
rollback to c2;
'Study > OracleDB' 카테고리의 다른 글
32강 테이블 구조 생성, 변경 및 삭제하는 DDL(2) (1) | 2022.09.11 |
---|---|
31강 테이블 구조 생성, 변경 및 삭제하는 DDL(1) (1) | 2022.09.11 |
29강 오라클 SQL insert, update, delete DML(2) (1) | 2022.09.11 |
28강 오라클 SQL insert, update, delete DML(1) (1) | 2022.09.11 |
27강 오라클 SQL set연산자(3) (1) | 2022.09.10 |