이 글은 오라클 기준으로 작성되었다.
TCL
트랜잭션의 특성
- 트랜잭션은 데이터베이스의 논리적 연산단위이다.
- 하나의 트랜잭션에는 하나 이상의 SQL문장이 포함된다.
- 트랜잭션은 분할할 수 없는 최소의 단위이다. 그렇기 때문에 전부 전용하거나 전부 취소한다.
- 즉, 트랜잭션은 ALL or NOTHING의 개념
COMMIT
- 입력한 자료나 수정한 자료에 대해서 또는 삭제한 자료에 대해서 전혀 문제가 없다고 판단되었을 경우 COMMIT 명령어를 통해서 트랜잭션을 완료할 수 있다.
- DDL (CREATE, ALTER, DROP, RENAME, TRUNCATE TABLE) 는 자동 커밋된다.
- 데이터 베이스 설정에 따라 자동 커밋이 될 수도있다. 이 때는 설정을 바꾸어 주거나 sql문 앞에 begin tran명령어를 붙여 트랜잭션을 직접 컨트롤하겠다라는 명령을 해주면 된다. (mysql)
COMMIT이나 ROLLBACK 이전의 데이터 상태
- 단지 메모리 버퍼에만 영향을 받았기 때문에 데이터의 변경 이전 상태로 복구 가능하다.
- 현재 사용자는 SELECT 문장으로 결과를 확인 가능하다.
- 다른 사용자는 현재 사용자가 수행한 명령의 결과를 볼 수 없다.
- 변경된 행은 잠금(LOCKING)이 설정되어서 다른 사용자가 변경할 수없다. (locking된 상태에서 다른 사용자가 변경요청을 하면 요청은 대기상태가 된다. locking이 풀릴 때까지)
COMMIT 이후의 상태
- 데이터에 대한 변경사항이 데이터베이스에 반영된다.
- 이전 데이터는 영원히 잃어버리게 된다.
- 모든 사용자는 결과를 볼 수 있다.
- 관련된 행에 대한 잠금(LOCKING)이 풀리고, 다른 사용자들이 행을 조작할 수 있게 된다.
- SVPT2로 롤백시 뒤에 선언한 SVPT3는 사라진다. SVPT1으로 롤백은 가능(데이터베이스 마다 지원여부가 다를 수 있음)
- SavePoint는 표준지원기능은 아니다.
- TO 구문이 붙은 롤백은 Locking을 해제시키지 않는다. (데이터베이스마다 다르다. 보통은 해제시키지 않는다)
트랜잭션 요점
- 테이블에 데이터의 변경을 발생시키는 입력(INSERT), 수정(UPDATE), 삭제(DELETE) 수행 시 그 변경되는 데이터의 무결성을 보장하는 것이 커밋과 롤백의 목적
- 커밋은 "변경된 데이터를 테이블이 영구적으로 반영해라" 라는 의미를 가짐
- 롤백은 "변경전으로 복귀하라"라는 의미
- 저장점 (SAVEPOINT/ SAVE TRANSACTION)은 "데이터 변경을 사전에 지정한 저장점까지만 롤백하라"는 의미
- Oracle의 트랜잭션은 트랜잭션의 대상이 되는 SQL 문장을 실행하면 자동으로 시작되고, COMMIT 또는 ROLLBACK을 실행한 시점에서 종료
COMMIT 및 ROLLBACK 처리와는 상관없이 트랜잭션 처리가 일어나는 상황(오라클기준)
- CREATE, ALTER, DROP, RENAME, TRUNCATE TABLE 등 DDL 문장을 실행하면 그 전후 시점에 자동으로 커밋 된다.
- DML 문장 이후에 커밋 없이 DDL 문장이 실행되면 DDL 수행전에 자동으로 커밋된다.
- 데이터베이스를 정상적으로 접속을 종료하면 자동으로 트랜잭션이 커밋된다.
- 애플리케이션의 이상 종료로 데이터베이스와의 접속이 단절됐을 때는 트랜잭션이 자동으로 롤백된다.
'Computer Science > 데이터베이스' 카테고리의 다른 글
SQL 함수(Function) - Oracle (0) | 2023.06.09 |
---|---|
SQL WRHER절 - Oracle (0) | 2023.06.09 |
DML(Data Manipulation Language)-Oracle (0) | 2023.06.09 |
DDL(Data Definition Language)-Oracle (0) | 2023.06.09 |
관계형 데이터베이스(Relational Database) (1) | 2023.06.09 |