[ 데이터베이스 ] TCL , 트랜잭션, COMMIT, ROLLBACK, SAVEPOINT
트랜잭션
트랜잭션
- 데이터베이스 조작, 논리적 연산단위,
- 하나의 SQL 문장 포함,
- 의미적으로 분할할 수 없는 최소 단위,
- ALL OR NOTHING
트랜잭션 특성 (ACID)
특성 | 설명 |
원자성 (Atomicity) | 트랜잭션에서 정의된 연산들은 모두 실행 or 전혀 실행되지 않음 (ALL OR NOTHING) lOCK 기능을 이용해 다른 트랜잭션 동시 접근 제어 |
일관성 (Consistency) | 트랜잭션이 실행 되도 데이터 베이스 내용은 잘못되지 않아야함 |
고립성 (Isolation) | 트랜잭션 실행 도중 다른 트랜잭션 영향 받으면 안돼 |
지속성 (Durability) | 트랜잭션 수행되면 갱신된 데이터베이스 내용은 영구적으로 저장됨 |
TCL
COMMIT
변경된 데이터를 데이터베이스에 영구 반영, INSERT, UPDATE, DELETE 사용 후 변경 완료 데이터베이스에 알려줌
COMMIT 이후 : 변경사항 저장, 이전 데이터 사라짐, 결과 볼 수 있음, LOCKING 풀림
ROLLBACK
변경된 데이터 문제시, COMMIT 이전 상태로 변경 사항 취소 가능
ROLLBACK 이후 : 변경사항 취소, 이전 데이터 재저장, LOCKING 풀림
SAVEPOINT(저장점)
SAVEPOINT : 미리 지정한 SAVEPOINT까지 트랜잭션 일부 롤백, 같은 이름의 SAVEPOINT 정의 시, 나중 설정값 유효
SAVEPOINT SVPT1; ROLLBACK SVPT1; |
SAVEPOINT A가 SAVEPOINT B보다 더 이전에 설정되었는데, ROLLBACK A를 실행하면 SAVEPOINT B는 사라진다.
COMMIT과 ROLLBACK
COMMIT 과 ROLLBACK 수행되면 종료된다.
논리적으로 연관된 작업을 그룹핑하여 처리 가능
영구적 변경 전 데이터 변경 사항 확인 가능
데이터 무결성 보장
DDL (CREATE, ALTER, DROP, RENAME, TRUNCATE TABLE)이 수행되면 자동 커밋된다.
데이터베이스 정상 종료 시 자동 커밋
데이터베이스 비정상 종료시 자동 롤백
ORACLE DML 수행시 사용자가 COMMIT, ROLLBACK 해주어야 한다.
SQL SERVER DML 수행 시 AUTO COMMIT 자동 커밋된다.
SQL SERVER 3가지 COMMIT
AUTO COMMIT : DML, DDL 단위 SQL 수행할 때마다 DBMS가 트랜잭션 컨트롤, 명령어 오류 없을 때 자동 커밋
암시적 트랜잭션 : 트랜잭션 시작은 DBMS가 처리, 사용자가 임의로 COMMIT, ROLLBACK시 트랜잭션 종료
SET IMPLICIT TRANSACTION ON
명시적 트랜잭션 : 트랜잭션 시작과 끝 모두 사용자가 지정
BEGIN TRANACTION
COMMIT TRANCATION, ROLLBACK TRANSACTION