트랜잭션
- UPDATE문을 실행한 후 천재지변 또는 데이터베이스 서버에 갑자기 문제가 생기는 경우
- UPDATE문을 실행하지 못하는 상황이 발생할 경우
위와 같은 데이터 유실을 막기 위해 UPDATE문을 완전히 실행하거나, 아무 UPDATE문도 실행하지 않는 상태를 유지해야 한다.
따라서, 연속해서 일어나는 UPDATE문은 하나의 실행 단위처럼 꼭 붙어 있어야 한다.
트랜잭션
: 더 이상 분할할 수 없는 최소 수행 단위
(어떤 기능 한 가지를 수행하는 SQL문 덩어리)
하나의 트랜잭션 내에 있는 여러 명령어를 한 번에 수행하여 작업을 완료하거나 아예 모두 수행하지 않는 상태 (ALL or NOTHING)
TCL(Transaction Control Language)
: 트랜잭션을 제어하기 위해 사용하는 명령어
여러 SQL문을 실행하고 TCL을 실행할 때 기존 트랜잭션은 끝이 남. 그 후 새로운 트랜잭션을 다시 시작
ROLLBACK
트랜잭션을 취소하고 싶을 때 사용
실행한 작업의 모든 수행을 취소하고 싶을 때 ROLLBACK 명령어 사용 (중간에 별다른 작업 없이 하나의 트랜잭션에 속해 있을 경우)
(+참고: SAVEPOINT 명령어를 이용해 작업 취소할 시점을 선택할 수 있음)
COMMIT
트랜잭션을 영원히 반영하고 싶을 때 사용
실행한 모든 작업을 영구적으로 데이터베이스에 반영할 때 COMMIT 명령어 사용
(COMMIT을 실행하면, 앞으로 ROLLBACK 명령어를 사용하지 못하기 때문에 신중하게 사용해야 함!!!)
SESSION
데이터베이스 접속을 시작으로 여러 데이터베이스에서 관련 작업을 수행한 후 접속을 종료하기까지 전체 기간 (간단하게, 로그인해서 로그아웃할 때까지의 기간)
세션이 여러 개 : 데이터베이스에 접속해 사용 중인 연결이 여러 개
세션 내부에는 하나 이상의 트랜잭션이 존재 (세션 > 트랜잭션)
- 데이터베이스에 접속 후 종료까지 과정이 하나의 세션
- 세션이 유지되는 동안 여러 COMMIT, ROLLBACK 작업이 진행되기 때문
읽기 일관성
데이터베이스는 여러 곳에서 동시 접근하여 데이터를 사용, 관리하는 것이 목적이므로 대부분 수많은 세션이 동시에 연결되어 있다.
읽기 일관성
: 어떤 특정 세션에서 테이블의 데이터를 변경 중일 때, 그 외 다른 세션에서는 데이터의 변경이 확정되기 전까지 본래의 데이터를 보여주는 특성
LOCK
특정 세션에서 조작 중인 데이터는 트랜잭션이 완료되기 전까지 다른 세션에서 조작할 수 없는 상태가 된다. (데이터가 잠김)
조작 중인 데이터를 다른 세션은 조작할 수 없도록 접근을 보류시키는 것
HANG(행)
: 특정 세션에서 데이터 조작이 완료될 때까지 다른 세션에서 해당 데이터 조작을 기다리는 현상
(어느 세션에서 데이터 조작 중일 때, 다른 세션에서 같은 행 데이터를 조작하려면 멈추는 듯한 현상 - 기존 세션에서 트랜잭션이 종료되어야 LOCK이 풀려서 실행됨)
⇒ LOCK은 하나의 데이터를 여러 곳에서 동시에 조작하려 할 때 발생할 수 있는 혼란을 최소화하기 위한 중요한 요소
행 레벨 록 (row level lock) : 특정 행만 lock
테이블 레벨 록 (table level lock) : 테이블 단위 lock
++ 전체 테이블 행이 LOCK 상태여도 INSERT문은 수행 가능
'Programming > Database' 카테고리의 다른 글
[ORACLE 초급] DDL - CREATE, ALTER, RENAME, TRUNCATE, DROP (0) | 2020.09.26 |
---|---|
[ORACLE 초급] DML - INSERT, UPDATE, DELETE (feat. 서브쿼리) (0) | 2020.09.26 |
[ORACLE 초급] 서브쿼리 - WHERE절(단일행, 다중행, 다중열), 인라인뷰(WITH절), 스칼라서브쿼리 (0) | 2020.09.20 |
[ORACLE 초급] 문법별 JOIN 사용법 - 내부조인, 외부조인, JOIN ~ USING/ON (0) | 2020.09.20 |
[ORACLE 중급] 그룹화 함수 - ROLLUP, CUBE, GROUPING, PIVOT 등 (0) | 2020.09.18 |