Programming/Database

[ORACLE 초급] 트랜잭션(COMMIT, ROLLBACK), SESSION, LOCK

728x90
반응형

트랜잭션

  1. UPDATE문을 실행한 후 천재지변 또는 데이터베이스 서버에 갑자기 문제가 생기는 경우
  2. UPDATE문을 실행하지 못하는 상황이 발생할 경우

위와 같은 데이터 유실을 막기 위해 UPDATE문을 완전히 실행하거나, 아무 UPDATE문도 실행하지 않는 상태를 유지해야 한다.
따라서, 연속해서 일어나는 UPDATE문은 하나의 실행 단위처럼 꼭 붙어 있어야 한다.

트랜잭션
: 더 이상 분할할 수 없는 최소 수행 단위
(어떤 기능 한 가지를 수행하는 SQL문 덩어리)

하나의 트랜잭션 내에 있는 여러 명령어를 한 번에 수행하여 작업을 완료하거나 아예 모두 수행하지 않는 상태 (ALL or NOTHING)

TCL(Transaction Control Language)
: 트랜잭션을 제어하기 위해 사용하는 명령어

여러 SQL문을 실행하고 TCL을 실행할 때 기존 트랜잭션은 끝이 남. 그 후 새로운 트랜잭션을 다시 시작

ROLLBACK

트랜잭션을 취소하고 싶을 때 사용

실행한 작업의 모든 수행을 취소하고 싶을 때 ROLLBACK 명령어 사용 (중간에 별다른 작업 없이 하나의 트랜잭션에 속해 있을 경우)
(+참고: SAVEPOINT 명령어를 이용해 작업 취소할 시점을 선택할 수 있음)

COMMIT

트랜잭션을 영원히 반영하고 싶을 때 사용

실행한 모든 작업을 영구적으로 데이터베이스에 반영할 때 COMMIT 명령어 사용
(COMMIT을 실행하면, 앞으로 ROLLBACK 명령어를 사용하지 못하기 때문에 신중하게 사용해야 함!!!)

SESSION

데이터베이스 접속을 시작으로 여러 데이터베이스에서 관련 작업을 수행한 후 접속을 종료하기까지 전체 기간 (간단하게, 로그인해서 로그아웃할 때까지의 기간)

세션이 여러 개 : 데이터베이스에 접속해 사용 중인 연결이 여러 개

세션 내부에는 하나 이상의 트랜잭션이 존재 (세션 > 트랜잭션)

  1. 데이터베이스에 접속 후 종료까지 과정이 하나의 세션
  2. 세션이 유지되는 동안 여러 COMMIT, ROLLBACK 작업이 진행되기 때문

읽기 일관성

데이터베이스는 여러 곳에서 동시 접근하여 데이터를 사용, 관리하는 것이 목적이므로 대부분 수많은 세션이 동시에 연결되어 있다.

읽기 일관성
: 어떤 특정 세션에서 테이블의 데이터를 변경 중일 때, 그 외 다른 세션에서는 데이터의 변경이 확정되기 전까지 본래의 데이터를 보여주는 특성

LOCK

특정 세션에서 조작 중인 데이터는 트랜잭션이 완료되기 전까지 다른 세션에서 조작할 수 없는 상태가 된다. (데이터가 잠김)
조작 중인 데이터를 다른 세션은 조작할 수 없도록 접근을 보류시키는 것

HANG(행)
: 특정 세션에서 데이터 조작이 완료될 때까지 다른 세션에서 해당 데이터 조작을 기다리는 현상
(어느 세션에서 데이터 조작 중일 때, 다른 세션에서 같은 행 데이터를 조작하려면 멈추는 듯한 현상 - 기존 세션에서 트랜잭션이 종료되어야 LOCK이 풀려서 실행됨)

⇒ LOCK은 하나의 데이터를 여러 곳에서 동시에 조작하려 할 때 발생할 수 있는 혼란을 최소화하기 위한 중요한 요소

행 레벨 록 (row level lock) : 특정 행만 lock
테이블 레벨 록 (table level lock) : 테이블 단위 lock

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

728x90
반응형