관리 메뉴

武裝

트랜잭션 제어와 세션 본문

프로그래머로 레벨업!/데이터베이스

트랜잭션 제어와 세션

zeechive 2024. 4. 5. 11:47

1. 트랜잭션 (transaction)

- 하나의 단위로 데이터를 처리하는 것 

 

-  ALL OR NOTHING 으로 설명하기도 한다

① 어떤 상황에서든 두 UPDATE문을 모두 완전히 실행하는 것
② 완전히 실행하는 것이 불가능 하다면, 두 UPDATE문을 실행하기 전의 상태,
      즉 아무 UPDATE문도 실행하지 않는 상태를 유지할 수 있어야 한다.

 

- 계좌 이체와 같이 하나의 작업 또는 밀접하게 연관된 작업을 수행하기 위해 

   한 개 이상의 데이터 조작 명령어(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_ECL WHERE DNAME = 'RESEARCH';
SELECT * FROM DEPT_TCL

을 통해서 추가와 삭제, 업데이트를 진행했지만, 프롬프터에 작성하면 아래와 같이 뜬다. 

 

- 오라클 SQL과 명령프롬프터는 다른 세션이다. 

 

 

 

 

2. 트랜잭션 (transaction) 제어하는 명령어 

- 트랜잭션을 영원히 반영하고 싶을 때는 COMMIT 

    : 지금까지 수행한 트랜잭션 명령어를 데이터베이스에 영구히 반영할 때

    : 트랜잭션 작업이 정상적으로 수행되었다고 확신할 때 사용

 

- 트랜잭션을 취소하고 싶을 때는 ROLLBACK 

   : COMMIT 을 실행하기 전에는 이미 적용이 된 것이 아니라, 임시 공간에 저장이 된 것이다. 

     해당 부분 반영을 취소하고 싶으면 사용하게 된다.  

 

 

+ ) SAVEPOINT : ROLLBACK 사용 시 취소 시점을 지정할 수 있다. 

insert into dept_tcl values (60, 'DATABASE', 'SEOUL');
SAVEPOINT SP1;
insert into dept_tcl values (70, 'DATABASE', 'SEOUL');
SAVEPOINT SP2;
insert into dept_tcl values (80, 'DATABASE', 'SEOUL');
SELECT * FROM dept_tcl;
ROLLBACK TO SP2;

     이렇게 작성하는 경우, 80 입력 직전 포인트로 롤백이 되어서 값이 60,70 포함된 것만 나올 수 있다. 

 

 

 

 

 

3. 세션과 읽기 일관성의 의미 

- 세션 : 어떤 활동을 위한 시간이나 기간,

            데이터베이스 접속으로 여러 데이터베이스 관련 작업을 수행한 후 접속 종료하기 전까지 기간 

- 세션이 여러 개라는 말은, 현재 오라클 데이터 베이스에 접속하여 사용 중인 연결이 여러 개

 

 

 

 

읽기 일관성의 중요성

  : 특정 세션에서 테이블의 데이터를 변경 중일 때, 데이터를 변경 중인 세션을 제외한

    나머지 세션에서는 현재 진행 중인 변경과 무관한 본래의 데이터를 보여 주는 특성을 의미한다.

 

 

 

 

4 수정 중인 데이터 접근을 막는 LOCK

- 특정 세션에서 조작 중인 데이터는 트랜잭션이 완료(COMMIT, ROLLBACK)되기 전까지 

  다른 세션에서 조작할 수 없는 상태

 

- HANG : 특정 세션에서 데이터 조작이 완료될 때까지 다른 세션에서 해당 데이터 조작을 기다리는 현상

 

 

- LOCK의 종류

  = 행 레벨 록(ROW LEVEL LOCK)  : SQL문으로 조작하는 대상 데이터가 테이블의 특정 행 데이터일 경우, 

            → WHERE절을 지정하지 않은 UPDATE, DELETE문일 경우, 테이블의 모든 행에 영향을 주는 명령어이므로,
                이 경우는 테이블에 저장되어 있는 전체 행이 LOCK 상태

            → 테이블 전체 행이 LOCK 상태여도 INSERT문의 수행은 가능

= 테이블 레벨 록(TABLE LEVEL LOCK)
    :  테이블에 변경되는 행의 수와는 상관없이, 데이터 조작 명령어(INSERT, DELETE, UPDATE, SELECT)를 사용하여

       데이터가 변경 중인 테이블은 테이블 단위 잠금, 테이블 레벨 록이 걸릭 된다.