[oracle] TCL - 트랜잭션 제어

재현·2024년 6월 16일
0
post-thumbnail

🔍 TCL (Transaction Control Language): 트랜잭션 제어 언어

✍ DCL과 비슷하지만 데이터가 아닌 트랜잭션을 제어할때 사용한다. 논리적인 작업 단위를 묶어 DML에 의해 조작된 결과를 트랜잭션 별로 제어한다.

✍트랜잭션은 데이터베이스의 논리적 연산 단위(하나의 연속적인 업무 단위) - 하나의 트랜잭션에는 하나 이상의 SQL 문장이 포함
✍ 분할 할 수 없는 최소의 단위
✍ ALL OR NOTHING 개념(모두 COMMIT 하거나 ROLLBACK 처리 해야 함)

🔍 트랜잭션 특성

✍ 원자성(atomicity) : 트랜잭션 정의된 연산들 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 함
✍일관성(consistency) : 트랜잭션 실행 전 데이터베이스 내용이 잘못되어 있지 않다면 트랜잭션 실행 이후에도 데이터베이스 내용의 잘못이 있으면 안됨
✍고립성(isolation) : 트랜잭션 실행도중 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안됨
✍지속성(durability) : 트랜잭션이 성공적으로 수행되면 갱신한 데이터베이스 내용이 영구적으로 저장

🔍 암시적 트랜잭션

✍ DDL, DCL 문장이 완료했을 시 자동으로 커밋, 명시적인 COMMIT이나 ROLLBACK 없이 SQL PLUS를 정상적으로 종료할 때
✍ 자동적인 롤백은 SQL PLUS를 비정상적으로 종료할 때나 시스템 실패 시 발생한다.

용어설명
COMMIT입력, 수정, 삭제한 데이터에 이상이 없을 경우 데이터를 저장하는 명령어
ROLLBACK테이블 내 입력한 데이터나 수정한 데이터, 삭제한 데이터에 대해 변경을 취소하는 명령어
SAVEPOINT트랜잭션 내에서 롤백을 부분적으로 수행하기 위해 사용되는 지점을 지정하는 데 사용
-- 트랜잭션
DROP TABLE EMPS;

-- DDL은 자동 커밋이 된다.
CREATE TABLE EMPS AS SELECT * FROM EMPLOYEES;

DELETE FROM EMPS WHERE DEPARTMENT_ID = 20;

SAVEPOINT DELETE_20;

DELETE FROM EMPS WHERE DEPARTMENT_ID = 30;


ROLLBACK; -- CTAS로 EMPS 테이블을 생성한 시점으로 돌아감

ROLLBACK TO SAVEPOINT DELETE_20; -- EMPS 테이블의 DEPARTMENT_ID가 20인 행을 삭제한 시점으로 돌아감

SELECT * FROM EMPS WHERE DEPARTMENT_ID = 30; -- 롤백으로 인해 6개의 행 출력

SELECT * FROM EMPS WHERE DEPARTMENT_ID = 20; -- 0개의 행

-- 오토 커밋 설정
-- autocommit IMMEDIATE
SET AUTOCOMMIT ON
SHOW AUTOCOMMIT

-- autocommit OFF
SET AUTOCOMMIT OFF
SHOW AUTOCOMMIT

📖 reference

인프런 오라클 데이터베이스

profile
운동과 코딩

0개의 댓글