1. Transaction이란?

 

transaction이란 '거래'라는 뜻으로 DB안에서 전부 되거나, 전부 되지 않는, 단위의 수행을 의미합니다.

단위 안에서 각각 순서가 있는데, 이 순서들이 정상적으로 처리가 되면 정상적으로 종료(commit)되고, 하나라도 정상적으로 처리가 되지 않는다면 전체가 취소(rollback)됩니다.

이는 데이터의 일관성을 유지하기 위한 기능으로, 안정적인 데이터를 복구시켜주는 특징이 있습니다.

 

트랜잭션의 예로, 은행 입출금이 있는데, A가 B로 돈을 만 원 송금한다는 전제로 시작하겠습니다.

 

 1) A의 계좌를 확인

 2) A의 계좌에서 만원을 차감

 3) B의 계좌를 확인

 4) B의 계좌에서 만원을 더함

 5) A와 B의 계좌를 확인

 

만약,

 

 2)번의 A계좌의 잔고가 0원이여서 만원을 차감하지 않은 상태에서 진행이 된다면, 

 A의 계좌 : 변동 없음

 B의 계좌 : +10,000원

 

 3)번의 B의 계좌번호가 확인이 되지 않은 상태에서 진행이 된다면,

 A의 계좌 : -10,000원

 B의 계좌 : 변동 없음

 

보통 은행에서의 계좌이체는 둘의 금액을 합치면 0원이 되어야하는 구조입니다.

위와같은 오류를 방지하기 위해 트랜잭션이 필요로 합니다.

 

2. 트랜잭션의 특징

 

원자성(Atomicity)

트랜잭션이 데이터베이스에 모두 반영이 되던가, 반영이 되지 않아야한다는 것.

분리할 수 없는 하나의 단위

일관성(Consistency)

트랜잭션에서 사용되는 모든 데이터는 일관성이 있어야 한다.

독립성(Isolation)

둘 이상의 트랜잭션이 동시에 실행되더라도 어떤 하나의 트랜잭션도 다른 트랜잭션의 연산에 끼어들 수 없음.

지속성(Durability)

트랜잭션이 완료될때 까지 다른 트랜잭션의 결과를 참조 할 수 없음.

 

3. SAVEPOINT, ROLLBACK TO 

 

SAVEPOINT 이름;

데이터를 보존 할 지점을 정함.

ROLLBACK TO 이름;

이름 부분까지 ROLLBACK처리

 

예제를 통해 확인해보겠습니다.

 

INSERT INTO FOOD VALUES('1', '김밥');
INSERT INTO FOOD VALUES('2', '우동');
INSERT INTO FOOD VALUES('3', '쫄면');

 

FOOD라는 테이블에 ID, NAME 컬럼에 각각 데이터를 입력하겠습니다.

 

 

SAVEPOINT A;

DELETE FOOD WHERE NAME='김밥';
DELETE FOOD WHERE NAME='우동';
DELETE FOOD WHERE NAME='쫄면';

ROLLBACK TO A;

 

그리고나서 SAVEPOINT인 A를 설정하고, DELETE로 데이터를 삭제시킨 후 ROLLBACK TO A를 실행시켜 데이터를 복구하는 과정을 실행하겠습니다.

 

먼저 SAVEPOINT A;를 실행시키면,

 

 

savepoint가 설정되었다는 텍스트와 함께 설정이 완료됩니다.

 

다음은 데이터 삭제입니다.

 

 

세개의 행이 모두 삭제되었습니다. 테이블에서 데이터를 확인하면,

 

 

데이터가 없는 것을 확인할 수 있습니다.

 

다음으로 rollback to a; 를 실행 시키겠습니다.

 

 

롤백완료 라는 문구가 떴습니다. 데이터를 확인해보겠습니다.

 

 

다시 데이터가 복구 된 것을 확인 할 수 있습니다.

 

'코딩 > Oracle' 카테고리의 다른 글

Oracle on delete cascade  (1) 2020.09.28
스키마란?  (0) 2020.08.27
Oracle Sequence  (0) 2020.07.09
Oracle 비밀번호 찾기/변경  (0) 2020.07.07
Oracle NVL, NVL2  (0) 2020.07.07
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기