반응형
1. 트랜잭션
- 정의
- 데이터베이스의 논리적 연산 단위
- 밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작을 가리킴
- 하나의 트랜잭션에는 하나 이상의 SQL 문장이 포함됨
- 분할할 수 없는 최소의 단위
- 특성
- 원자성 : 트랜잭션에서 정의된 연산들은 전부 실행되거나 전혀 실행되지 않음(All or Nothing)
- 일관성 : 트랜잭션이 실행되기 전의 DB 내용이 잘못되어 있지 않다면 트랜잭션이 실행된 이후에도 DB의 내용이 잘못이 있으면 안 됨
- 고립성 : 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안 됨
- 지속성 : 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 DB의 내용은 영구적으로 저장됨
2. TCL
- 데이터 무결성 보장을 목적으로 하고 영구 변경 전 확인과 연관 작업 동시처리 가능
- Oracle은 SQL 문장을 실행하면 트랜잭션이 시작되고 TCL을 실행하면 트랜잭션이 종료됨
- DDL을 실행하면 자동 커밋(DML 이후 커밋 없이 DDL을 실행해도 자동 커밋)
- DB를 정상적으로 종료하면 자동 커밋, 애플리케이션 등의 이상으로 DB 접속이 단절되면 자동 롤백
3. COMMIT
- 데이터를 DB에 영구적으로 반영하는 명령어
- 커밋 시 트랜잭션이 완료되어 LOCKING이 해제됨
- SQL Server는 기본적으로 자동으로 커밋
- COMMIT 전
- 데이터 변경이 메모리 버퍼에만 영향을 받았기 때문에 복구 가능
- 현재 사용자는 SELECT 문장으로 결과를 확인 가능하지만 다른 사용자는 현재 결과 볼 수 없음
- 변경된 행은 잠금(LOCKING)이 설정되어서 다른 사용자가 변경할 수 없음
- COMMIT 후
- 변경 사항이 DB에 반영되고 이전 데이터는 복구 불가
- 모든 사용자가 결과를 볼 수 있음
- LOCKING이 해제되어 다른 사용자가 행을 조작할 수 있음
- Oracle
- 직접 COMMIT을 해줘야 함 - SQL Server
- 자동으로 COMMIT- AUTO COMMIT : SQL Server의 기본 방식이며 자동으로 COMMIT을 하고 오류가 발생하면 자동으로 ROLLBACK을 함
- 암시적 트랜잭션 : Oracle과 같은 방식으로 트랜잭션의 시작은 DBMS가 처리하고 트랜잭션의 끝은 사용자가 명시적으로 COMMIT 또는 ROLLBACK을 해줘야 한다.
- 명시적 트랜잭션 : 트랜잭션의 시작과 끝을 모두 사용자가 명시적으로 지정하는 방식이다.
BEGIN TRANSACTION(BEGIN TRAN)으로 트랜잭션을 시작하고 COMMIT TRANSACTION(TRANSACTION 생략 가능) 또는 ROLLBACK TRANSACTION(TRANSACTION 생략 가능)으로 트랜잭션을 종료한다. ROLLBACK 구문을 만나면 최초의 BEGIN TRANSACTION 시점까지 모두 ROLLBACK이 수행된다.
4. ROLLBACK
- 트랜잭션 시작 이전의 상태로 되돌리는 명령어
- COMMIT 이전 상태로 돌려줌
- ROLLBACK 시 LOCKING이 해제됨
- Oracle
- SQL Server
5. SAVEPOINT
- 트랜잭션 일부만 롤백할 수 있도록 중간 상태를 저장하는 명령어
- 동일한 저장점명이 있다면 나중 저장점이 유효함
- Oracle
SAVEPOINT ROLLBACK - SQL Server
SAVEPOINT ROLLBACK - 예시
6. COMMIT과 ROLLBACK의 효과
- 데이터 무결성 보장
- 영구적은 변경을 하기 전에 데이터의 변경 사항 확인 가능
- 논리적으로 연관된 작업을 그룹핑하여 처리 가능
반응형
'SQLD > 2과목 SQL 기본 및 활용' 카테고리의 다른 글
[SQLD]Ⅱ- 1장 SQL 기본 - 6절 함수(FUNCTION) (0) | 2022.04.07 |
---|---|
[SQLD]Ⅱ- 1장 SQL 기본 - 5절 WHERE 절 (0) | 2022.04.06 |
[SQLD]Ⅱ- 1장 SQL 기본 - 3절 DML(DATA MANIPULATION LANGUAGE) (0) | 2022.03.31 |
[SQLD]Ⅱ- 1장 SQL 기본 - 2절 DDL(DATA DEFINITION LANGUAGE) (0) | 2022.03.29 |
[SQLD]Ⅱ- 1장 SQL 기본 - 1절 관계형 데이터베이스 개요 (0) | 2022.03.29 |