코딩하는 문과생

[SQL] Oracle, 트랜잭션 제어와 세션 본문

프로그래밍/SQL

[SQL] Oracle, 트랜잭션 제어와 세션

코딩하는 문과생 2020. 3. 31. 11:27

데이터 조작어(DML)를 사용해 데이터에 미치는 영향은 트랜잭션과 세션 안에서 최종적으로 실행 취소 또는 반영이 결정된다.

 

트랜잭션

: 더이상 분할할 수 없는 최소 수행 단위

어떤 기능 한가지를 수행하는 'SQL문 덩어리'

ALL OR NOTHING(작업 전체를 완료하거나 하지 않는다. 부분적 실행X)

DB에 접속하는 동시에 시작

 

TCL

:ALL OR NOTHING 중 하나의 상태로 유도하는 명령어. 즉, 데이터 조작(DML)을 영구반영 또는 작업을 전체 취소한다.

 

-사전작업

CREATE TABLE DEPT_TCL
    AS SELECT * FROM DEPT;
 
INSERT INTO DEPT_TCL 
VALUES(50, 'DATABASE', 'SEOUL');
 
UPDATE DEPT_TCL
SET LOC='BUSAN'
WHERE DEPTNO=40;
 
DELETE FROM DEPT_TCL
WHERE DNAME='RESEARCH';

SELECT * FROM DEPT_TCL;

 

-ROLLBACK

: 현재 트랜잭션에 포함된 DML명령어를 모두 취소

ROLLBACK;

-COMMIT

: 명령어를 DB에 반영

COMMIT 명령어 사용 기점으로 DML 취소 불가

COMMIT;

-SAVEPOINT

: 작업을 취소할 지점을 지정

 

세션:

어떤 활동을 위한 시간이나 기간

  • 오라클 세션: DB접속을 시작으로 접속이 종료되기까지 전체 기간
  • 세션이 여러개라는 말: 토드(A)로 접속하고 SQL PLUS(B)로 접속하는 경우
  • 읽기 일관성: 데이터를 변경 중인 세션 이외 나머지 세션에서는 본래의 데이터를 보여주는 특성

 

- 세션 A에서 해당 명령어 실행 후 SELECT문으로 조회

DELETE FROM DEPT_TCL
WHERE DNAME='SALES';

 

A: 아직 COMMIT전 상태, B: 다른 세션은 본래의 데이터를 보여준다.

 

LOCK

: 특정 세션에서 조작 중인 데이터는 트랜잭션이 완료되기 전까지 다른 세션에서 조작을 할 수 없다.

A세션에서 50번에 해당하는 작업을 COMMIT을 하지 않으면 B세션에서 50번에 해당되는 DML작업이 실행되지 않는다. 

 

-LOCK종류

  • 행 레벨 LOCK
  • 테이블 레벨 LOCK

'프로그래밍 > SQL' 카테고리의 다른 글

[SQL] Oracle, 객체 종류  (0) 2020.03.31
[SQL] Oracle, 데이터 정의어(DDL)  (0) 2020.03.31
[SQL] Oracle, 데이터 조작어(DML)  (0) 2020.03.30
[SQL] Oracle, 서브쿼리  (0) 2020.03.30
[SQL] Oracle, 조인  (0) 2020.03.30