Back-End/Oracle

Oracle ■ TCL COMMIT, ROLLBACK, SAVEPOINT

SIKIDA 2024. 8. 7. 18:13
728x90

 

 

TCL

 

• TCL (Transcation Controll Language)

트랜잭션을 제어하는 언어


• 트랜잭션(Transaction)

데이터베이스에서 실행되는 논리적 작업 단위

SELECT, INSERT, UPDATE, DELETE와 같은 연산을 수행하여 데이터베이스의 상태를 변화

시키는 작업의 단위로써 이러한 일련의 작업들이 발생하는 단위를 말함

 

• 트랜잭션의 특징(ACID)

1. Atomicity(원자성)

-> 트랜잭션이 모두 반영 되던지, 모두 반영되지 않던지 해야 함

-> 트랜잭션의 모든 작업은 반드시 성공 해야하며, 하나라도 에러가 발생할 경우 모든 작업에 대한

트랜잭션이 모두 취소되어야 함

2. Consistency(일관성)

-> 작업의 처리 결과가 항상 일관성이 있어야 함

3. Isolation(독립성)

-> 두 개 이상의 트랜재션이 실행중일 경우 다른 트랜잭션이 실행중인 트랜잭션에 끼어들 수 없음

4. Durability(지속성)

-> 트랜잭션이 성공했다면 결과는 영구적으로 반영되어야 함

 

• 트랜잭션

 

• 트랜잭션 성공 시

1
2
3
4
5

 

 

• 트랜잭션이 실패한다면?

A는 송금 처리되어 1만원이 차감되었으나, 송금 도중 에러가 발생하여 B는 입금을 받지

못하여 잔액이 그대로 임

 

 

TCL(COMMIT)

 

• COMMIT

모든 작업을 성공적으로 완료하여 변경된 내용을 데이터베이스에 반영하는 작업

 

• COMMIT 확인하기 (1)

webuser 계정으로 테이블에 데이터를 추가하고 SELECT로 삽입된 데이터 확인

* 자신이 직접 작업한 내용은 실시간으로 반영된것처럼 보임

 

• COMMIT 확인하기 (2)

CMD창 열기 -> sqlplus -> webadmin 계정 접속 -> SELECT * FROM webuser.webuser_tb; 입력하여 DBeaver에서 작업한 내용이 데이터베이스에 반영되지 않았음을 확인

 

• COMMIT 확인하기 (3)

DBeaver로 되돌아와 COMMIT; 수행

 

• COMMIT 확인하기 (4)

CMD로 다시 되돌아와서 다시 webuser.webuser_tb 조회

 

 

 TCL(ROLLBACK)

 

• ROLLBACK

작업 진행 도중 에러 또는 문제가 발생하여 현재 작업 내용을 데이터베이스에 반영하지 않고,

마지막 COMMIT 시점으로 되돌림

 

• ROLLBACK

작업 도중 실수로 DELTE를 잘못 사용하여 전체 데이터가 삭제된 상황이라면

* 자신이 작업한 내용은 모두 삭제된것처럼 보임

 

CMD에 접속되어 있는 webadmin 계정으로 확인하면 아직 데이터가 잘 보임

* COMMIT을 사용하여 데이터베이스에 반영하지 않았기 때문에

 

 

 

 

 

 TCL(SAVEPOINT)

 

• SAVEPOINT

세이브 포인트를 만들어 롤백 시 지정한 세이브 포인트로 트랜잭션을 롤백

 

표현법

-> 저장 시 : SAVEPOINT 포인트명;

-> 사용 시 : ROLLBACK TO 포인트명;

 

INSERT 후 SP1 이름의 세이브 포인트를 만들어 UPDATE 진행

 

 

 

• 참고

한번 사용 후 SP1 지점으로 다시 되돌릴 수 없음.

만약 다시 되돌리고 싶다면 SAVEPOINT SP1을 한번 더 선언 해주어야 함

 

• SAVEPOINT

SP1 지점으로 롤백 후 다시 ROLLBACK; 을 입력하게 되면 세이브포인트 지점을 지정하지

않았기 떄문에 마지막 COMMIT 지점으로 롤백됨

 

 

오늘은 TCL에 속하는 COMMIT, ROLLBACK, SAVEPOINT에 대해 공부를 진행하였다.

그럼 오늘하루도 화이팅 그럼 20000!!!

'Back-End > Oracle' 카테고리의 다른 글

Oracle ■ SEQUENCE, INDEX  (0) 2024.08.09
Oracle ■ DCL GRANT, REVOKE  (0) 2024.08.02
Oracle ■ DDL ALTER, DROP  (0) 2024.07.29
Oracle ■ 데이터베이스 정규화  (1) 2024.07.26
Oracle ■ CREATE  (0) 2024.07.25