-
[Oracle] TCL(Transaction Control Language)RDS/Oracle 2019. 2. 23. 10:29반응형
트랜잭션(Transaction)이란?
데이터베이스에서 트랜잭션은 데이터 처리의 한 단위입니다. 오라클에서 발생하는 여러 개의 SQL 명령문들을 하나의 논리적인 작업 단위로 처리하는데 이틀 트랜잭션이라고 합니다.
하나의 트랜잭션은 ALL-OR_Nothing 방식으로 처리됩니다. 여러 개의 명령어의 집합이 정상적으로 처리되면 정상 종료하도록 하고 여러 개의 명령어 중에서 하나의 명령어라도 잘못되었다면 전체를 취소합니다.
트랜잭션의 특성
원자성(atomicity)
- 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전행 실행되지 않은 상태로 남아 있어야 합니다.
일관성(consistency)
- 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안 됩니다.
고립성(isolation)
- 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안 됩니다.
지속성(durability)
- 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장됩니다.
트랜잭션 제어를 위한 명령어
COMMIT
- 저장되지 않은 모든 데이터를 데이터베이스에 저장하고 현재의 트랜잭션을 종료하라는 명령입니다.
SAVEPOINT
- 현재까지의 트랜잭션을 특정 이름으로 지정하라는 명령입니다.
ROLLBACK
- 저장되지 않은 모든 데이터 변경 사항을 취소하고 현재의 트랜잭션을 종료하라는 명령입니다.
COMMIT, ROLLBACK 문
1234567891011121314151617181920212223242526272829303132-- 1.현재 트랜잭션을 종료하기 위해서 COOMMIT 문을 실행합니다.COMMIT;-- 2.TEMP01_EMP 테이블의 내용을 조회합니다.SELECT *FROM TEMP01_EMP;-- 3.DELETE 문을 실행하여 TEMP01_EMP에 모든 데이터를 삭제합니다.DELETEFROM TEMP01_EMP;-- 4.특정 데이터만 삭제하려고 했는데 위에 같은 명령을 수행했다면 모든 데이터가 삭제되어 조회 시에 원하는 데이터를 찾을 수 없습니다.SELECT *FROM TEMP01_EMP;-- 5.DELETE 문을 실행하기 전 상태로 복구하기 위해서 ROLLBACK 문을 실행합니다.ROLLBACK;-- 6.ROLLBACK 문을 실행하면 DELETE 문을 실행하기 전 상태로 복구됩니다.SELECT *FROM TEMP01_EMP;-- 7.특정 데이터만 삭제한 후, 확인합니다.DELETEFROM TEMP01_EMPWHERE EMPNO = 7369;SELECT *FROM TEMP01_EMP;-- 8.삭제한 결과를 영구적으로 반영하기 위해서는 COMMIT 문을 실행합니다.COMMIT;cs COMMIT과 ROLLBACK 데이터 상태
COMMIT이나 ROLLBACK 이전의 데이터 상태
- 단지 메모리 BUFFER에만 영향을 받았기 때문에 데이터의 변경 이전 상태로 복구가 가능합니다.
- 현재 사용자는 SELECT 문으로 결과를 확인 가능합니다.
- 다른 사용자는 현재 사용자가 수행한 명령의 결과를 확인 할 수 없습니다.
- 변경된 행은 잠근(LOCKING)이 설정되어서 다른 사용자가 변경할 수 없습니다.
COMMIT 이후의 데이터 상태
- 데이터에 대한 변경 사항이 데이터베이스에 반영됩니다.
- 이전 데이터는 영구적으로 잃어버리게 됩니다.
- 모든 사용자는 결과를 확인 할 수 있습니다.
- 관련된 행에 대한 잠금(LOCKING)이 풀리고, 다른 사용자들이 행을 조작할 수 있습니다.
ROLLBACK 이후의 데이터 상태
- 데이터에 대한 변경 사항은 취소됩니다.
- 이전 데이터는 다시 복구됩니다.
- 관련된 행에 대한 자금(LOCKING)이 풀리고, 다른 사용자들이 행을 조작할 수 있습니다.
COMMIT이나 ROLLBACK 효과
- 데이터 무결성을 보장할 수 있습니다.
- 영구적이 변경을 하기 전에 데이터의 변경 사항을 확인 할 수 있습니다.
- 논리적으로 연관된 작업을 그룹핑하여 처리가 가능합니다.
SAVEPOINT 문
12345678910111213141516171819202122232425-- 1.EMPNO가 7369인 데이터를 삭제하기 전에 SAVEPOINT A를 설정합니다.SAVEPOINT A;DELETEFROM TEMP01_EMPWHERE EMPNO = 7369;-- 2.EMPNO가 7499인 데이터를 삭제하기 전에 SAVEPOINT B를 설정합니다.SAVEPOINT B;DELETEFROM TEMP01_EMPWHERE EMPNO = 7499;-- 3.EMPNO가 7499를 삭제하기 전 상태로 ROLLBACK 후, 확인합니다.ROLLBACK TO B;SELECT *FROM TEMP01_EMP;-- 4.EMPNO가 7369인 삭제하기 전 상태로 ROLLBACK 후, 확인합니다.ROLLBACK TO A;SELECT *FROM TEMP01_EMP;cs - SAVEPOINRT A를 실행하고 나서 SAVEPOINT B를 실행할 수는 없습니다. 일단 특정 저장저맊지 롤백하면 그 저장점 이후에 설정한 저장점은 무효가 되기 때문입니다. 즉, 'ROLLBACK TO A'를 실행한 시점에서 저장점 A 이후에 정의한 저장점 B는 존재하지 않습니다. 저장점 지정 없이 "ROLLBACK"을 실행했을 경우 반영안된 모든 변경 사항을 취소하고 트랜잭션 시작 위치로 되돌아갑니다.
반응형'RDS > Oracle' 카테고리의 다른 글
[Oracle] 함수(Function) - 문자형 함수 (0) 2019.03.02 [Oracle] WHERE절 (0) 2019.02.24 [Oracle] DML(Data Manipulation Language) (0) 2019.02.09 [Oracle] DDL(Data Definition Language) (0) 2019.02.05 [Oracle] SQL Developer - IO 오류:Undefined Error 업체 코드 17002 (0) 2019.01.17