[Oracle 4-3] TCL(TRANSACTION CONTROL LANGUAGE) : 트렌젝션 제어어

임승현·2022년 10월 25일

Oracle

목록 보기
12/20

🐧TCL(TRANSACTION CONTROL LANGUAGE) : 트렌젝션 제어어

◈ 트렌젝션에 저장된 SQL 명령을 실제 테이블에 적용하여 실행하거나 적용하지 않고 취소하는 명령
◈ 트렌젝션(TRANSACTION) : 세션에서 DBMS 서버에 전달되어 실행될 SQL 명령들을
저장하기 위한 작업단위
◈ 클라이언트에서 작성한 SQL 명령을 서버에 전달하고 테이블에 바로 적용하는 것이
아니라 트렌젝션에 저장하여 나중에 실행되도록 처리
◈ 세션(SESSION) : DBMS 서버에 접속하여 SQL 명령을 전달하여 실행하기 위한 사용자의 작업환경

◈ 트렌젝션에 저장된 SQL 명령을 실제 테이블에 적용하는 방법 : 커밋(COMMIT) 처리 - 커밋 처리후 트렌젝션 초기화
1. 현재 세션이 정상적으로 서버 접속을 종료한 경우 자동 커밋 처리
2. DDL 명령 또는 DCL 명령을 작성하여 서버에 전달한 경우 자동 커밋 처리
3. DML 명령을 작성하여 서버에 전달한 경우 COMMIT 명령을 사용하여 커밋 처리

◈ 트렌젝션에 저장된 SQL 명령을 실제 테이블에 적용하지 않고 삭제하는 방법
→ 롤백(ROLLBACK) 처리
1. 현재 세션에서 비정상적으로 서버 접속이 종료한 경우 자동 롤백 처리
2. DML 명령을 작성하여 서버에 전달한 경우 ROLLBACK 명령을 사용하여 롤백 처리

▦ DEPT 테이블에 저장된 모든 부서정보 검색

◈ 트렌젝션에 저장된 SQL 명령이 없으므로 실제 테이블의 행을 검색하여 결과 제공

SELECT * FROM DEPT;


───────────────────────────────────────

▦ DEPT 테이블에서 부서번호가 50인 부서정보 삭제

◈ DELETE 명령을 서버에 전달하면 DEPT 테이블의 행을 삭제하지 않고 트렌젝션에
DELETE 명령 저장

DELETE FROM DEPT WHERE DEPTNO=50;


───────────────────────────────────────
◈ 실제 테이블의 행을 검색하여 트렌젝션에 저장된 SQL 명령(DELETE)이 실행된 결과 제공

SELECT * FROM DEPT;


───────────────────────────────────────
◈ 롤백 처리 - 트렌젝션에 저장된 SQL 명령 삭제

ROLLBACK;


─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

SELECT * FROM DEPT;


※ 실제 테이블의 검색결과 제공

▦ DEPT 테이블에서 부서번호가 50인 부서정보 삭제

DELETE FROM DEPT WHERE DEPTNO=50;


─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
◈ 커밋 처리 : 트렌젝션에 저장된 SQL 명령(DELETE)을 실제 테이블에 적용 - 트렌젝션 초기화

COMMIT;


※ 실제 테이블에 저장된 행 삭제
─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

SELECT * FROM DEPT;


※ 실제 테이블의 검색결과 제공

▦ EMP 테이블에 저장된 모든 사원정보 삭제

DELETE FROM EMP;


─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

SELECT * FROM EMP;


───────────────────────────────────────
◈ 서버에 전달된 SQL 명령이 잘못된 경우 롤백 처리를 통한 데이터 복구를 위해 트렌젝션 사용 - 데이터 무결성 유지 위한 방법

ROLLBACK;


─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

SELECT * FROM EMP;

◈ 현재 세션에서 작업중인 결과를 커밋 전까지 다른 세션에서 검색되지 않도록 트렌젝션 사용
→ 데이터 일관성을 제공하는 방법
◈ 데이터 일관성 : DBMS를 사용하는 모든 사용자에게 동일한 검색결과를 제공

▦ BONUS 테이블에서 사원이름이 KIM인 사원정보 삭제

SELECT * FROM BONUS;


─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

DELETE FROM BONUS WHERE ENAME='KIM';


─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

SELECT * FROM BONUS;

◈ 다른 세션에서는 BONUS 테이블에 사원이름이 KIM인 사원 검색
◈ 현재 세션에서 커밋 처리를 하기 전까지 다른 세션에서는 SQL 명령이 적용되기 전의
검색결과 제공 - 데이터 일관성

COMMIT;


※ 현재 세션에서 커밋 처리를 해야만 다른 세션에서도 SQL 명령이 적용된 검색결과 제공

◈ 데이터 잠김(LOCK) 기능을 제공하기 위해 트렌젝션 사용
◈ DBMS는 다중 사용자 환경으로 같은 테이블의 행을 다른 세션에서 조작 가능
◈ 현재 세션에서 작업중인 테이블의 행을 다른 세션에서 작업하지 못하도록 트렌젝션을
사용하여 데이터 잠금 기능 제공

▦ BONUS 테이블에서 사원이름이 ALLEN인 사원의 급여를 2000으로 변경

SELECT * FROM BONUS;


─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

UPDATE BONUS SET SAL=2000 WHERE ENAME='ALLEN';


─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

SELECT * FROM BONUS;

◈ 다른 세션에서 BONUS 테이블에서 사원이름이 ALLEN인 사원의 성과급을 급여의 50%로 변경
◈ UPDATE BONUS SET COMM=SAL*0.5 WHERE ENAME='ALLEN';
◈ 현재 작업중인 테이블의 행을 다른 세션에서 조작할 경우 트렌제션에 의해 데이터
잠김 기능으로 인해 세션 일시 중지
◈ 현재 세션에서 작업중인 DML 명령을 커밋 또는 롤백 처리를 해야만 다른 세션의
DML 명령이 실행

COMMIT;

◈ SAVEPOINT : 트렌젝션에 라벨(위치정보)을 붙이는 명령
◈ 트렌젝션에 저장된 라벨을 이용하여 원하는 위치의 DML 명령들을 롤백 처리하기 위해 사용
형식) SAVEPOINT 라벨명

▦ BONUS 테이블에서 사원이름이 ALLEN인 사원정보 삭제

SELECT * FROM BONUS;


─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

DELETE FROM BONUS WHERE ENAME='ALLEN';


─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

SELECT * FROM BONUS;

▦ BONUS 테이블에서 사원이름이 MARTIN인 사원정보 삭제

DELETE FROM BONUS WHERE ENAME='MARTIN';


─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

SELECT * FROM BONUS;

◈ 롤백 처리

ROLLBACK;


※ 트렉젝션에 저장된 모든 DML 명령을 삭제
─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

SELECT * FROM BONUS;

▦ BONUS 테이블에서 사원이름이 ALLEN인 사원정보 삭제

DELETE FROM BONUS WHERE ENAME='ALLEN';


─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

SELECT * FROM BONUS;


─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

SAVEPOINT ALLEN_DELETE_AFTER;


※ 트렌젝션에 라벨 부착

▦ BONUS 테이블에서 사원이름이 MARTIN인 사원정보 삭제

DELETE FROM BONUS WHERE ENAME='MARTIN';


─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

SELECT * FROM BONUS;

▦ SAVEPOINT 명령으로 설정된 라벨을 이용하여 롤백 처리

형식) ROLLBACK TO 라벨명
◈ 트렌젝션에서 사원이름이 MARTIN인 사원정보를 삭제하는 DELETE 명령 제거

ROLLBACK TO ALLEN_DELETE_AFTER;


─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

SELECT * FROM BONUS;

0개의 댓글