리오집사의 기억저장소

01. 트랜잭션(TRANSACTION)

02. 트랜잭션 특징

03. COMMIT 명령과 트랜잭션 제어

04. 트랜잭션 제어 명령어 TCL



01. 트랜잭션

*트랜잭션

-DB의 논리적 연산 단위이다.

-예를 들어 계좌 이체 같은 경우, 보내는 쪽의 돈을 받는 쪽에 보내고, 보내는 쪽의 계좌 금액을 줄인다.

  반대로 받는 쪽은 돈을 받고, 계좌 금액이 증가된다.

  이를 합해서 계좌 이체라고 하고, 이런 계좌 이체 같은 하나의 논리적인 작업 단위를 구성하는 세부적인 연산들의 집합을

  트랜잭션이라고 한다.

-데이터베이스 응용 프로그램은 트랜잭션들의 집합이라고 할 수 있다.


*LOCKING(잠금)

-기본적으로 트랜잭션이 수행되는 동안 다뤄지는 특정 데이터에 대해서,

  다른 트랜잭션들이 동시에 접근하지 못하도록 제한하는 기법을 락킹이라고 한다.

-락킹된 데이터는 그 락킹을 시행한 트랜잭션만이 독점적으로 락킹할 수 있고,

  다른 트랜잭션으로부터 간섭이나 방해를 받지 않는 것이 보장된다.

-락킹된 데이터는 잠금을 수행한 트랜잭션만이 해제할 수 있다.



02. 트랜잭션 특징

ⓐ원자성 - 트랜잭션에 정의된 연산들은 모두 성공적으로 실행되거나

               아니면 전혀 실행되지 않은 상태로 남아있어야 한다.

ⓑ일관성 - 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못되어 있지 않으면,

               트랜잭션 실행 이후에도 DB의 내용에 이상이 없어야 한다.

ⓒ고립성 - 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안 된다.

ⓓ지속성 - 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 DB의 내용은 영구적으로 저장된다.



03. COMMIT 명령과 트랜잭션 제어(완료하고 싶다면 COMMIT!)

- 완료했다고 알리는 COMMIT 명령은 왜 필요할까?

   만약 다른 사람이 나와 동시에 같은 데이터를 수정할 경우 문제가 발생할 수 있기 때문에,

  한 사람이 작업 완료 후에, 완료했다는 의사표현을 할 때까지 다른 사람에게 작업한 내용을 보여주지 않기 위해서 필요하다.

- 이러한 것을 '트랜잭션 제어'라고 한다.



04. 트랜잭션 제어 명령어(SAVEPOINT를 생활화하자)

ⓐCOMMIT 후의 데이터 상태

  -변경사항이 DB에 반영되며, 이전 데이터는 영원히 잃어버리게 된다.

  -모든 사용자가 결과를 볼 수 있게 된다.

  -관련된 행에 대한 락킹이 풀리고, 다른 사용자들이 조작할 수 있게 된다.


ⓑROLLBACK : 이런 상태로의 복귀 기능

  -관련된 행에 대한 락킹이 풀리고, 다른 사용자들이 데이터 변경을 할 수 있게 된다.

  -접속한 시점 or COMMIT 실행한 시점 이후에 작업한 것이 모두 원래대로 복귀된다.

  -사용 방법 : [ROLLBACK;]  [ROLLBACK TO A;] 여기서 A는 세이브포인트명을 뜻한다.


ⓒSAVEPOINT

  -현 시점에서 SAVEPOINT 까지, 트랜잭션의 일부만 ROLLBACK 이 가능하도록 해주는게 SAVEPOINT

  -SAVE POINT는  [SAVEPOINT 세이브포인트명;] 과 같이 사용되며, 복수로 정의할 수 있다.

  -어떤 SAVEPOINT까지 롤백하고 나면,

   그 이후의(미래의) SAVEPOINT 방향으로 되돌릴 수 없게 된다.


반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band