이 글은 뉴렉쳐 오라클 데이터베이스 SQL 강의를 수강하며 정리한 글입니다.
13강 Transaction 처리를 위한 Commit/RollBack
Transaction: 업무 실행단위 / 논리 명령단위
1. 업무적인 단위
‘계좌이체’ 처리
2. 물리적인 명령어 단위
2개 이상의 Update(명령어) 처리 필요
(송금인 계좌-, 수금인 계좌+ 등)
⚠️ 송금인의 계좌에 잔액이 부족한 경우 문제가 발생
→ 모든 쿼리 문장이 문제가 없다는 것이 판명이 되고 사용자의 계좌에 적용이 되어야 함
⭐ 하나의 업무적인 단위인 ‘계좌이체’를 실행하기 위한 물리적인 명령어 단위인 ‘UPDATE’가 한 번에 실행되어야 함
= 하나의 업무적인 단위인 TRANSACTION이 깨지게 해서는 안됨
⭐ TRANSACTION이 깨지지 않기 위한 해결 방법
→ 2개이상의 명령어 집합이 하나인 것처럼 묶어서 실행
1. 현재 세션을 위한 임시저장소에서 테스트
= 사용자에게는 모든 명령이 완료되고나서 노출되어야 함
2. 테스트 중 다른 세션이 건드리지 못하도록 LOCK → UNLOCK
INSERT한 내용을 다른 사용자에게 노출시켜도 문제가 없을 것이라고 생각이 들면 COMMIT; 입력
❓ 만일, TEST한 내용을 다른 SESSION에 보이고 싶지 않을 경우에는?
❓ 하나의 세션에서 자료A를 수정하는 도중(COMMIT과 ROLLBACK 아무것도 하지 않은 작업중의 상태) 다른 SESSION에서 수정 또는 삭제를 하려는 경우
→ 작업중인 SESSION에서 COMMIT OR ROLLBACK을 해야 다른 SESSION 작업이 시작될 수 있음
→ COMMIT OR ROLLBACK 실행 시, 다른 SESSION의 대기중인 명령문 실행
⭐ 정리
1. TRANSACTION 단위로 업무 수행을 위해 임시 저장소에서 1개의 TRANSACTION을 수행하기 위한 다수의 명령어 수행
2. 작업 중 다른 SESSION에서 동시에 접근하지 못하도록 LOCK을 걸어둠
3. 작업이 종료되고나서 공유 여부에 따라 COMMIT(다른 SESSION과 최종 결과 공유) OR ROLLBACK(다른 SESSION에 공유하지 않고 수행 결과 삭제) 실행
4. 만일 한 SESSION에서 TEST 중 다른 SESSION이 같은 부분에 대해 접근할 경우, 대기 상태를 유지하고 COMMIT OR ROLLBACK 후, 다른 SESSION이 TEST 수행
→ 이 경우, SESSION간 Data의 차이가 발생할 수 있음
소스 코드
'DataBase > Oracle' 카테고리의 다른 글
Oracle SQL 강의 - 15강 비교연산자(=,!=,^=,...) (0) | 2023.03.02 |
---|---|
Oracle SQL 강의 - 14강 연산을 통한 데이터 조회 (산술 연산자) (0) | 2023.03.01 |
Oracle SQL 강의 - 12강 데이터 조작하기 #2 (UPDATE/DELETE) (0) | 2023.02.26 |
Oracle SQL 강의 - 11강 데이터 조작하기 #1 (INSERT/SELECT) (0) | 2023.02.25 |
Oracle SQL 강의 - 10강 SQL 쿼리 연습을 테이블 준비하기 (0) | 2023.02.24 |