일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- SQLD
- SQLD SQL 활용
- 백준 1141
- SQLD 정리
- 백준 1141 로직
- 백준 접두사 로직
- 백준 부분합 로직
- 자바 DP 예제
- 백준 2293 동전 1
- SQLD 요약
- 자바 이분 탐색 예제
- SQLD SQL 최적화 기본 원리
- 오라클 예제
- 백준 접두사 자바
- 백준
- 백준 동전1 자바
- 너비우선탐색
- 백준 예산 자바
- 백준 예산 코드
- 백준 2293 자바
- BFS
- SQLD 내용 정리
- SQLD 책
- 자바 예제
- 알고리즘
- 백준 1141 접두사
- 자바 문자열 예제
- SQLD 내용
- SQL 기본 및 활용
- 백준 2512 자바
- Today
- Total
혼자 공부하는 공간
[SQL기본 및 활용] 2020년 SQLD 내용 정리 :: SQL 기본 #4 본문
<목차>
<< TCL (Transaction Control Language) >>
* COMMIT
: SQL문의 결과를 DB에 반영시키는 작업
* ROLLBACK
: SQL문의 결과를 DB에 반영시키지 않고 트랜잭션 시작 이전의 상태로 되돌리는 작업.
* SAVEPOINT
: ROLLBACK의 시점을 정할 수 있는 지점
* 트랜잭션의 대상이 되는 SQL문은 DML문(INSERT, UPDATE, DELETE, SELECT)
* SELECT 문 중에서도 SELECT FOR UPDATE 등 배타적 LOCK을 요구하는 SELECT 문은 트랜잭션의 대상이 됨
1. 트랜잭션 개요
-
정의
* 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 일련의 연산. -
특징
* 하나의 트랜잭션에는 하나 이상의 SQL 문장이 포함.
* 트랜잭션은 그 자체로 하나의 논리적인 단위이므로 더 이상 분할할 수 없음.---> 그렇기 때문에 전부 적용하거나 전부 취소. (All or Nothing) -
예시
* 내 계좌에서 상대의 계좌로 10,000원을 송금하는 경우-
작업 A. 내 계좌에서 -10,000, 작업 B. 상대 계좌에서 +10,000. 작업 A과 B는 분할 할 수 없고, 일부만 적용할 수 없음.
-
작업A + 작업B를 더해서 하나의 논리적 기능을 수행하는 단위로 정의 : 트랜잭션
-
-
특성
-
원자성 (Atomicity)
* 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되거나 모두 실행되지 않아야 하는 성격.
* 원자성을 충족하기 위해 DB는 다양한 레벨의 잠금(LOCK) 기능을 제공.
* LOCK은 기본적으로 트랜잭션이 수행하는 동안 다른 트랜잭션이 처리 중인 데이터에 동시에 접근하지 못하도록 제한.
* COMMIT/ROLLBACK 작업 후 LOCK이 해제. (LOCK을 수행한 트랜잭션이 해제 가능)
-
일관성 (Consistency)
* 트랜잭션 작업 처리의 결과가 항상 일관성이 있어야 하는 성격.
-
고립성 (Isolation)
* 트랜잭션이 실행되는 도중, 다른 트랜잭션의 영향을 받을 수 없는 성격.
-
지속성 (Durability)
* 트랜잭션이 성공적으로 수행되면 그 결과는 영구적으로 반영되어야 한다는 성격.
-
2. COMMIT
* DML 문이 수행된 후에 영향받은 데이터에 문제가 없다고 판단이 되면 COMMIT 명령어를 통해 DB에 반영하여 트랜잭션을 완료.
* COMMIT/ROLLBACK 이전의 데이터 상태는 아래와 같다.
-
메모리 버퍼에만 영향을 받았기 때문에 데이터의 변경 이전 상태로 복구가 가능.
-
현재 사용자는 SELECT문으로 결과를 확인할 수 있음.
-
다른 사용자는 현재 사용자가 수행한 명령의 결과를 확인할 수 없음.
-
변경된 행은 LOCK이 설정되어 다른 사용자가 변경할 수 없음.
* COMMIT 이후의 데이터 상태는 아래와 같다.
-
데이터에 대한 변경이 DB에 반영.
-
이전 데이터는 모두 잃게 됨.
-
모든 사용자가 결과를 확인할 수 있음.
-
영향받은 행의 LOCK 이 해제되어 다른 사용자가 조작할 수 있게 됨.
* Oracle VS SQL Server
-
Oracle
* DBMS가 트랜잭션을 내부적으로 실행하며 DML 문장 수행 후 사용자가 임의로 COMMIT/ROLLBACK 처리를 해주어야 트랜잭션이 종료.
* 일부 툴에서는 AUTO COMMIT 옵션으로 변경 가능.
-
SQL Server
* 기본적으로 AUTO COMMIT 모드이기 때문에 DML 수행 후 임의로 COMMIT/ROLLBACK 처리 할 필요가 없음.
* 에러가 발생하지 않으면 COMMIT, 에러가 발생하면 ROLLBACK
* 트랜잭션 방식
- AUTO COMMIT : 기본 방식.
- 암시적 트랜잭션 : Oracle과 같은 방식. 사용자가 COMMIT 명시.
- 명시적 트랜잭션 : 트랜잭션의 시작/끝을 모두 사용자가 명시적으로 지정하는 방식.
3. ROLLBACK
DML 문이 수행된 후에 영향받은 데이터에 대해서 COMMIT 이전에는 변경 사항을 다시 트랜잭션 실행 이전으로 되돌릴 수 있는 기능.
* ROLLBACK 이후의 데이터 상태는 아래와 같다.
-
데이터 변경 사항이 모두 취소되며 영향받은 행에 대한 LOCK이 해제.
-
다른 사용자들이 데이터를 조작할 수 있게 됨.
-
DML에 의해 변경되기 전의 데이터는 다시 재저장.
* ROLLBACK / COMMIT 을 통해 얻는 효과
-
데이터 무결성 보장.
-
영구적인 변경 전에 데이터의 변경 사항 미리 확인 가능.
-
논리적으로 연관된 작업을 그룹핑하여 처리 가능.
* 다양한 상황에서의 자동 ROLLBACK / COMMIT
-
DML 문 이후 COMMIT이나 ROLLBACK 없이 DDL(CREATE, DROP, ALTER, TRUNCATE, RENAME) 문을 실행하면 자동으로 COMMIT 됨 (Oracle)
-
DB를 정상적으로 접속 종료하면 자동으로 COMMIT 됨.
-
애플리케이션의 이상 종료로 DB와의 접속이 단절되었을 때는 자동으로 ROLLBACK 됨.
4. SAVEPOINT
* ROLLBACK 할 때, 트랜잭션에 포함된 전체 작업을 취소하는 것이 아닌, 특정 시점까지 일부만 취소할 때 사용하는 명령어.
-
특징
* 복수의 SAVEPOINT 정의 가능.
* 동일한 이름으로 SAVEPOINT를 정의했을 때는 나중에 정의한 것이 유효.
-
예시 - Oracle
SAVEPOINT SVPT1; -- 저장점 정의 ROLLBACK TO SVPT1; -- 저장점으로 롤백
-
예시 - SQL Server
SAVE TRANSACTION SVTR1; -- 저장점 정의 ROLLBACK TRANSACTION SVTR1; -- 저장점으로 롤백
-
ROLLBACK 원리 - Oracle 기준
* 특정 시점으로 롤백하면 그 시점 이후의 저장점은 무효처리. (A로 갔다가 B로 갈 수 없음.)
출처
질문은 댓글로 남겨주시면 되겠습니다. 감사합니다.
'자격증 > SQLD' 카테고리의 다른 글
[SQL기본 및 활용] 2020년 SQLD 내용 정리 :: SQL 기본 #6 (0) | 2020.08.21 |
---|---|
[SQL기본 및 활용] 2020년 SQLD 내용 정리 :: SQL 기본 #5 (0) | 2020.08.20 |
[SQL기본 및 활용] 2020년 SQLD 내용 정리 :: SQL 기본 #3 (0) | 2020.08.16 |
[SQL기본 및 활용] 2020년 SQLD 내용 정리 :: SQL 기본 #2 (0) | 2020.08.15 |
[SQL기본 및 활용] 2020년 SQLD 내용 정리 :: SQL 기본 #1 (0) | 2020.08.14 |