[Oracle Database] 9. 트랜잭션에 대해 알아보자
트랜잭션이란 ?
일련의 연산 집합. DB 시스템에서 하나의 논리적 기능을 수행하기 위한 작업의 단위이다.
계좌이체를 하는 상황을 떠올려보자.
계좌이체 라는 행위는 인출과 입금 두 과정으로 이루어진다. 이 두 과정은 동시에 성공하던지 동시에 실패해야 한다.
이 과정을 묶는 방법을 트랜잭션이다.
트랜잭션의 특징 (ACID)
- 원자성
- 더이상 나누어 질 수 없는 작업단위(All or Nothing)
- 일관성
- 트랜잭션 실행 전과 후에도 항상 일관성을 유지해야 함.
(정상적으로 실행 된다면)
- 트랜잭션 실행 전과 후에도 항상 일관성을 유지해야 함.
- 격리성
- 실행 중 연산의 중간 결과를 다른 트랜잭션이 접근 불가능
- 영속성
- 트랜잭션이 성공적으로 실행되면 그 결과는 영속적.
앞으로 날라가면 X. 영원히 유지되어야 함
- 트랜잭션이 성공적으로 실행되면 그 결과는 영속적.
TCL이란?
트랜잭션을 제어하기 위해 사용하는 명령어
TCL의 상태
- 모든 명령어가 정상적으로 수행 완료된 상태
- 모든 명령어가 수행되지 않아 취소된 상태
트랜잭션을 취소하고 싶을 땐 ?
모든 작업의 수행을 취소하고 싶다면 ROLLBACK 명령어를 사용한다.
ROLLBACK 이란 ?
트랜잭션의 처리 과정에서 발생한 변경사항을 취소하는 명령어
명령어를 사용하면 트랜잭션은 시작되기 이전의 상태로 되돌아간다.
즉, 마지막 Commit을 완료한 시점으로 돌아간다
ROLLBACK;
트랜잭션을 영구적으로 반영하고 싶을 땐 ?
COMMIT 명령어를 사용한다.
COMMIT이란?
트랜잭션을 완료했다고 기록하는 것
특징
- 트랜잭션의 성공적인 실행을 보장 → 일관성 있는 DB 상태 유지 의미
- 영구적인 갱신
- 갱신된 데이터의 영속성 보장
ROLLBACK을 통해 작업을 취소할 지점을 지정하고 싶을 땐 ?
SAVEPOINT명령어를 사용한다.
세션과 읽기 일관성
세션이란 ?
어떤 활동을 위한 시간이나 기간
오라클 데이터베이스에서의 세션이란 ?
데이터베이스 접속을 시작으로 여러 데이터 베이스에서 관련 작업을 수행한 후 접속을 종료하기 까지의 전체 기간
읽기 일관성?
어떤 특정 세션에서 테이블의 데이터를 변경 중일 때, 그 외 다른 세션에서는 데이터의 변경이 확정되기 전까지 변경 사항을 알 필요가 없다.
데이터를 변경 중인 세션을 제외한 나머지 세션에서는 현재 진행 중인 변경과 무관한 본래의 데이터를 보여 준다.
LOCK
조작 중인 데이터를 다른 세션은 조작할 수 없도록 접근을 보류시키는 것
특징
- 데이터 객체의 비공유, 비중첩 (내가 쓰고 싶은 데이터는 잠궈서 쓰겠다)
- 원자성, 격리성 보장
- 단일 소유자
- 로크한 트랜잭션만이 로크를 해제
LOCK 종류
행 레벨 록
: SQL문으로 조작하는 대상 데이터가 테이블의 특정 행 데이터일 경우, 해당 행만 LOCK 이 발생
테이블 레벨 록
테이블에 변경되는 행의 수와는 상관없이, 데이터 조작 명령어(INSERT, DELETE, UPDATE, SELECT)를 사용하여 데이터가 변경 중인 테이블은 테이블 단위 LOCK