武裝
트랜잭션 제어와 세션 본문
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)를 사용하여
데이터가 변경 중인 테이블은 테이블 단위 잠금, 테이블 레벨 록이 걸릭 된다.
'프로그래머로 레벨업! > 데이터베이스' 카테고리의 다른 글
객체 종류 (0) | 2024.04.08 |
---|---|
데이터 정의어 (1) | 2024.04.05 |
데이터를 추가, 조정, 삭제하는 데이터 조직어 (0) | 2024.04.04 |
서브 쿼리 (0) | 2024.04.04 |
여러 테이블을 하나의 테이블처럼 사용하는 조인 (1) | 2024.04.03 |