티스토리 뷰
트랜잭션(Transaction)
- 트랜잭션은 데이터베이스(Database)에서 데이터를 처리의 한 단위를 의미한다.
- 오라클 서버에서 발생하는 여러 개의 SQL문들이 하나의 논리적인 작업 단위로써,
성공하거나 실패하는 일련의 SQL문을 트랜잭션이라고 보면 된다.
- 오라클 서버는 트랜잭션의 개념에 의해 데이터의 일관성을 보증하고, 안정적인 복구가 가능하다.
- 트랜잭션은 데이터를 일관되게 변경하는 DML문장으로 구성된다.
※ DML문장 = COMMIT, ROLLBACK, SAVEPOINT, ROLLBACK TO
트랜잭션의 시작 시점
- 실행 가능한 SQL 문장이 제일 처음 실행될 때
트랜잭션의 종료 시점
- COMMIT이나 ROLLBACK
- DDL이나 DCL문장의 실행(자동 COMMIT)
- 기계 장애 또는 시스템 충돌(crash)
- DEADLOCK
- 사용자가 정상 종료
COMMIT(전체 트랙잰션의 변경사항을 저장)
: COMMIT은 하나의 트랜잭션인 여러 DML(Insert, Update, Delete) 명령어를
정상적으로 데이터베이스에 반영하겠다는 의미의 명령어이다.
즉, 하나의 트랜잭션 과정이 정상적으로 종료하게 된다.
COMMIT;
이때, COMMIT명령어를 사용하지 않아도 자동 COMMIT이 되는 경우가 있다.
・자동 COMMIT 되는 경우는 다음과 같다.
- DLL(CREATE, DROP) 및 DCL 명령문을 수행할 때
- 명시적인 COMMIT이나 ROLLBACK 없이 SQL*PLUS를 정상적으로 종료했을 경우
트랜잭션 취소는 두 종류가 있다.
1. 작업 전체를 취소하는 [ROLLBACK]
2. 작업 중 특정 부분만 취소하는 [SAVEPOINT]와 [ROLLBACK TO]
ROLLBACK(전체 트랙잭션의 변경사항을 취소)
: ROLLBACK은 잘못된 명령이나 잘못된 데이터를 입력하는 등 문제가 발생하였을 때
하나의 트랜잭션을 취소하는 명령어이다.
ROLLBACK;
이 때, ROLLBACK명령어를 사용하지 않아도 자동 ROLLBACK이 되는 경우가 있다.
・자동 ROLLBACK 되는 경우는 다음과 같다.
- SQL*PLUS를 비정상 종료했을 경우
- 비정상적인 종료, System Failure
SAVEPOINT(부분 취소할 트랜잭션의 특정부분을 지정)
: SAVEPOINT는 하나의 트랜잭션을 작게 분할하여 저장하는 기능이다.
하나의 트랜잭션에서 여러 개 지정이 가능하다.
[SAVEPOINT SAVEPOINT 이름]
ROLLBACK TO(지정한 SAVEPOINT까지 트랜잭션의 변경사항을 취소)
: 저장된 SAVEPOINT에 [ROLLBACK TO SAVEPONT명] 문을 이용하여 해당 SAVEPOINT까지 ROLLBACK을 할 수 있다.
[ROLLBACK TO SAVEPONT명]
+) 추가설명
・COMMIT 명령어와 ROLLBACK 명령어의 장점
- 데이터의 일관성을 제공한다.
- 데이터를 영구적으로 변경하기 전에 데이터의 변경사항을 확인할 수 있다.
- 관련된 작업을 논리적으로 그룹화할 수 있다.
- COMMIT, SAVEPOINT, ROLLBACK문장으로 TRANSACTION의 논리를 제어할 수 있다.
・COMMIT이나 ROLLBACK 이전의 데이터 상태
- 데이터 이전의 상태로 복구가 가능
- 현재 사용자는 SELECT문장으로 DML 작업의 결과를 확인할 수 있다.
- 다른 사용자는 SELECT 문장으로 현재 사용자가 사용한 DML 문장의 결과를 확인할 수 없다.
- 변경된 행은 LOCK이 설정되어서 다른 사용자가 변경할 수 없다.
・COMMIT 이후의 데이터 상태
- 데이터베이스에 데이터를 영구적으로 변경
- 데이터의 이전 상태는 완전히 상실한다.
- 모든 사용자가 결과를 볼 수 있다.
- 변경된 행의 LOCK이 해제되고 다른 사용자가 변경할 수 있다.
- 모든 SAVEPOINT는 제거된다.
'Oracle > [oracle] DML' 카테고리의 다른 글
[SQL/Oracle] DELETE사용법 & 예제 (0) | 2020.12.28 |
---|---|
[SQL/Oracle] UPDATE 사용법 & 예제 (0) | 2020.12.28 |
[SQL/Oracle] INSERT 사용법 & 예제 (0) | 2020.12.25 |
[SQL/Oracle] SUBSTR, SUBSTRB 함수 사용법 & 예제 (0) | 2020.12.24 |
[SQL/Oracle] SELECT 사용법 & 예제 (0) | 2020.12.23 |
- Total
- Today
- Yesterday
- NLog
- rollback
- 유틸리티
- PL/SQL 실행문
- REVOKE
- 시간차이
- 유틸리티에러
- in/out/ref 예제
- VB.Net
- Oracle
- commit
- in/out/ref 공통점
- 초기화파라미터파일
- vba
- TrimEnd
- in/out/ref
- EXCEPTION절
- pl/sql
- DECLARE절
- 후나빙
- in/out/ref 차이점
- PL/SQL 예외처리문
- C#
- 에러
- BEGIN절
- USER_SYS_PRIVS
- DBA_SYS_PRIVS
- 동기통신
- grant
- 참조전달
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |