트랜젝션(Transaction)
•
거래
•
데이터베이스 내에서 하나의 그룹으로 처리되어야 하는 명령문들을 모아 놓은 논리적인 작업 단위
•
데이터베이스 응용 프로그램 = 트랜잭션들의 집합
•
여러 단계의 처리를 하나의 처리처럼 다루는 기능
•
여러 개의 명령어의 집합이 정상적으로 처리되면 정상 종료
•
하나의 명령어라도 잘못되면 전체 취소
•
사용 이유 : 데이터의 일관성을 유지하면서 안정적으로 데이터를 복구하기 위함
필요성
•
거래의 안정성을 확보하는 방법
◦
거래가 성공적으로 모두 끝난 후에야 이를 완전한 거래로 승인하고, 거래 도중 뭔가 오류가 발생했을 때는 이 거래를 아예 처음부터 없었던 거래로 되돌리는 것
•
데이터베이스에선 테이블에서 데이터를 읽어 온 후 다른 테이블에 데이터를 입력하거나 갱신, 삭제하는데 처리 도중 오류가 발생하면 모든 작업을 원상태로 복구. (Ctrl + Z)
•
데이터베이스에선 처리 과정이 모두 성공했을 때만 최종적으로 데이터베이스에 반영
특징
•
원자성 : 트랜잭션이 데이터 베이스에 모두 반영이 되거나 전혀 되지 않는것
•
일관성 : 트랜잭션의 작업 처리 결과가 항상 일관성 있어야 하는 것
•
독립성 : 둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 경우에 어느 하나의 트랜잭션이라도 다른 트랜잭션의 연산을 끼어들 수 있는 것
•
지속성 : 트랜잭션이 성공적으로 완료됐을 경우, 결과는 영구적으로 반영되어야 하는 것
상태
•
트랜잭션 파트
◦
내가 적은 쿼리문
◦
성공 시 데이터를 최종적으로 데이터베이스에 반영하는 COMMIT
◦
실패 시 COMMINT 시점으로 다시 되돌아가는 ROLLBACK
1.
활동 : 트랜잭션이 실행 중에 있는 상태, 연산들이 정상적으로 실행 중인 상태
2.
실패 : 트랜잭션이 실행에 오류가 발생하여 중단된 상태
3.
철회 : 트랜잭션이 비정상적으로 종료되어 ROLLBACK 연산을 수행한 상태
4.
부분적 완료 : COMMIT 연산이 실행되기 직전의 상태로 아직 작성한 것들을 저장하지 않은 상태
5.
완료 : 트랜잭션이 성공적으로 종료되어 COMMIT 연산을 실행한 후의 상태
COMMIT
•
완전 저장
•
모든 작업들을 정상적으로 처리하겠다고 확정하는 명령어로 처리과정을 DB에 영구 저장하는 것
•
COMMIT을 수행하면 하나의 트랜잭션 과정을 종료하는 것
•
COMMIT을 수행하면 이전 데이터가 완전히 UPDATE 됨
1.
위 그림에서 첫번째 COMMIT(2) 후 그 뒤에 UPDATE 문으로 데이터를 갱신하고(3), DELETE문으로 데이터를 삭제하고(4), INSERT 문을 사용해 데이터를 삽입(5)
2.
만약 이 모든 과정이 오류 없이 수행되었다면 해당 트랜잭션{지금까지 실행한 모든 작업(3,4,5)들}을 데이터베이스에 영구 저장하라는 명령으로 COMMIT을 수행
COMMIT;
SQL
복사
ROLLBACK
•
작업 중 문제가 발생되어 트랜잭션의 처리과정에서 발생한 변경사항을 취소하는 명령어
•
트랜잭션이 시작되기 이전의 상태로 되돌린다.
== 마지막 COMMIT을 완료한 시점으로 다시 돌아간다.
•
COMMIT하여 저장한 것만 복구
◦
위 그림에서 ROLLBACK 명령은 마지막으로 수행한 COMMIT 명령까지만 정상처리(1,2)된 상태로 유지
◦
그 이후에 트랜잭션{수행했던 모든 DML 명령어 작업(3,4,5)들}을 취소시켜 이전 상태로 원상 복귀
◦
트랜잭션은 이렇든 ALL-OR-Nothing 방식으로 DML 명령어들을 처리
ALL-OR-Nothing : '모든것을 수행하던지 아무것도 하지말던지'라는 의미
ROLLBACK TO [SAVEPOINT NAME];
SQL
복사
SAVEPOINT
•
임시저장
•
보통 ROLLBACK을 명시하면 INSERT, DELETE, UPDATE 등의 작업 전체가 취소되는데 전체가 아닌 특정 부분에서 트랜잭션 취소 가능
•
SAVEPOINT를 쓰면 현재의 트랜잭션을 작게 분할 가능
•
SAVEPOINT는 여러 개의 SQL문의 실행을 수행하는 트랜잭션의 경우에 사용자가 트랜잭션 중간 단계에서 SAVEPOINT를 지정 가능
•
SAVEPOINT : ROLLBACK할 포인트 지정
•
기본형태 : SAVEPOINT 세이브포인트이름;
•
ROLLBACK 형태 : ROLLBACK TO 세이브포인트이름;