본문으로 바로가기

[DATABASE][TransAction]

category DATABASE 2018. 4. 19. 15:04



TransAction


-Transaction 이란?


-데이터베이스 내에서 하나의 그룹으로 처리되어야 하는

명령문들을 모아 놓은 논리적인작업 단위


-여러 단계의 처리를 하나의 처리처럼 다루는 기능


-여러 개의 명령어의 집합이 정상적으로 처리되면 정상 종료


하나의 명령어라도 잘못되면 전체취소


WHY?

데이터의 일관성을 유지하면서 안정적으로 데이터를 복구



[1], [2]번까지 잘 실행되다가 [3]번 작업 시 소프트웨어가 중단되거나 하드웨어가 고장이 발생한다면?

[2]번까지의 모든 작업을 취소하고 트랜젝션 작업 전 데이터베이스 초기 상태로 돌아가게 된다.


특징

원자성(Atomicity) =트랜잭션이 데이터베이스에 모두 반영되던가아니면 전혀 반                             영되지 않아야 한다는 것이다

일관성(Consistency)=트랜잭션의 작업 처리 결과가 항상

                             일관성이 있어야 한다는 것이다

독립성(Isolation)=둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 경우에 어느 하                         나의 트랜잭션이라도 다른 트랜잭션의 연산을 끼어들 수 없다

지속성(Durability)=트랜잭션이 성공적으로 완료됬을 경우결과는 영구적으로 반영                           되어야 한다는 점이다.




1-3Transaction 상태도


-Commit RollBack


COMMIT=

 -모든 작업들을 정상적으로 처리하겠다고 확정하는 명령어로 처리과정을 DB에 영구저장

-수행하면, 하나의 트랜잭션 과정을 종료

-이전 데이터가 완전히 UPDATE된다


그림 쉽게 보기 

-아래 그림에서 UPDATE 문으로 데이터를 갱신하고(③), DELETE 문으로 데이터를 삭제하고(④), INSERT 문을 사용해 데이터를 삽입(⑤)합니다.

-만약 이 모든 과정이 오류 없이 수행되었다면 지금까지 실행한 모든 작업(③, ④, ⑤)"데이터베이스에 영구 저장하라"는 명령으로 커밋을 수행합니다.

 

ROLLBACK=

-작업 중 문제가 발생되어 트랜잭션의 처리과정에서 발생한변경사항을 취소하는 명령어

-트랜잭션으로 인한 하나의 묶음처리가 시작되기 이전의 상태로 되돌린다

-이전 COMMIT곳까지만 복구한다

그림 쉽게 보기 



-롤백 명령은 마지막으로 수행한 커밋 명령까지만 정상 처
(①, ②)된 상태로 유지하고 그 이후에 
수행했던 모든 DML 명령어 작업(③, ④, ⑤)들을 취소시켜 이
전 상태로 원상 복귀시킵니다.
-트랜잭션은 이렇듯 All-OR-Nothing 방식으로 DML 명령어들
을 처리합니다



-rollback으로 이전으로 복구해보기
ROLLBACK 문을 사용하여 이전 상태로 되돌릴 수 있
습니다.
1.DELETE 문으로 테이블을 삭제합니다. 그전! 
insert끝낼때 commit 입력

DELETE FROM trat3;


-만일 id 2012에 대해서만 삭제하려고 했는데 위와 
같은 명령을-수행했다면 테이블 내의 모든 로우가 
삭제되어 다음과 같이 아무런 데이터도 찾을 없게 됩니다.
이전 상태로 되돌리기 위해
서 ROLLBACK 문을 수행합니다
ROLLBACK;


-commit으로 삭제 영구 저장하기

황요셉에 대한 정보만 삭제한 후, 확인합니다.

DELETE FROM trat3 WHERE id=2012;

데이터를 삭제한 결과를 물리적으로 영구히 저장하기
 위해서 커밋을 수행합니다

COMMIT;



COMMIT 명령어과 ROLLBACK 명령어의 장점


-데이터 무결성이 보장됩니다.


-영구적인 변경 전에 데이터의 변경 사항을 확인할 


수 있습니다.



-논리적으로 연관된 작업을 그룹화할 수 있습니다.



SavePoint=

-SAVEPOINT 명령을 써서 현재의 트랜잭션을 작게 
분할할 수 있습니다.

-저장된 SAVEPOINTROLLBACK TO SAVEPOINT 
문을 사용하여 표시한 곳까ROLLBACK할 수 있습
니다.

-여러 개의 SQL 문의 실행을 수반하는 트랜잭션의 
경우,사용자가 트랜잭션 중간 단계에서
 세이브포인트를 지정할 수 있습니다.

-이 세이브포인트는 차후 롤백과 함께 사용해서 현재 
트랜잭션 내의 특정 세이브포인트까지 롤백할 수 있게 됩니다.

그림과 함께 보기 
-COMMIT 명령이 내려진 후 다음 COMMIT 명령이
 나타날 때까지가 하나의 트랜잭션으로 구성되므로 
②번에서 ④번까지가 하나의 트랜잭션이 됩니다

-이렇게 트랙잭션을 구성할 때 중간 중간
SAVEPOINT 명령으로 위치를 지정해 놓으면(예를 들어 C) 하나의 
트랜잭션 내에서도 ROLLBACK TO C(SAVEPOINT 사용하여 표시한 곳)
까지 ROLLBACK할 수 있습니다




*트랜잭션을 작게 분할하는 
SAVEPOINT
 
-SAVEPOINT로 특정 위치를 지정하기 위한 사용 
형식

SAVEPOINT LABEL_NAME;


-SAVEPOINT로 지정해 놓은 특정 위치로 


되돌아가기 위한 사용 형식

ROLLBACK TO LABEL_NAME;