반응형

❏ 트랜잭션

 

 - 데이터베이스의 논리적 연산 단위.

 - 밀접히 관련되어서 분리될 수 없는 한 개 이상의 데이터베이스 조작(insert, update, delete, select for update)

 - 분할할 수 없는 최소의 단위 ALL  or  NOTHING

 

 - COMMIT : 올바르게 반영된 데이터를 데이터베이스에 반영. (한마디로 적용.)

 - ROLLBACK :  트랜잭션 시작 이전의 상태로 돌리는 것.

 - LOCK : 트랜잭션이 수행되는 동안 특정 데이터에 대해서 다른 트랜잭션이 동시에 접근하지 못하도록 제한하는 기법

 

한마디로. 트랜잭션이란 물리적이 아니라 논리적. 눈에 보이지 않고. 어떠한 작업의 단위이다.

트랜잭션내에 묶인 작업들이 다 성공 하거나 아니면 하나라도 실패하면 전으로 돌려놔야한다.

대표적인 예로 은행 계좌이체. 

 

만약 이 계좌이체 과정들이 하나의 트랜잭션으로 묶이지 않고, 따로따로 되있다면..

A 라는 계좌에서 10,000 원을 B 의 계좌로 입금하는데. 

중간에 A의 계좌에서 10,000 원 빼는 SQL 명령문은 성공했다. 그런데, 이제 B 의 계좌에 10,000원을

추가해야하는 SQL 명령문이 실패해버렸다. 그냥. A만 10,000원이 없어졌다.. 이런일이 일어나면 안되니까

하나의 트랜잭션 안에 있어야 한다.

 

트랜잭션의 4가지 특성

1. 원자성 : all or nothing. 다 되던지, 아니면 아예 실행되기 전으로 하던지.

2. 일관성 : 문 들어가기 전과 나온 후가 같아야됨. 전에 내용이 잘못되있는게 없다면. 트랜잭션 후에도

              내용에 잘못된게 없어야겠지

3. 독립성(고립성) : 트랜잭션이 실행되는 도중에는 다른 트랜잭션들이 방해할 수는 없다. 

4. 지속성 : 트랜잭션이 성공하면 그 내용은 영구적으로 저장된다.

 

독 일 지 원

 

 

❏ COMMIT

 

 - 입력한 자료에 문제가 없다. commit 명령어를 통해 트랜잭션을 완료할 수 있다.

 - 하는 법은 그냥 commit; 하면됨

 

COMMIT / ROLLBACK 이전의 상태

 - buffer 에만 영향을 받았기 때문에 데이터의 변경 이전상태로 복구가 가능

 - 현재사용자는 select 문장으로 결과를 확인 가능

 - 다른사용자는 현재사용자가 수행한 명령의 결과를 볼 수 없다

 - 변경된 행은 잠금이 설정되어서 다른사용자가 변경할 수 없다

 

한마디로 insert, update, delete 이런거 (DML) 하면 바로 DB 에 적용되는게 아니라

버퍼에서 놀아난다고 했었는데. commit 를 해야 진정한 적용을 하는것이다.

commit 를 하기 직전까지의 얘기이다. 다 맞는말.

 

COMMIT 를 한 후..

 - 데이터에 대한 변경사항이 데이터베이스에 반영된다

 - 이전 데이터는 영원히 잃어버리게 된다

 - 모든 사용자는 결과를 볼 수 있다

 - 관련된 행에 대한 잠금이 풀리고 다른 사용자들이 행을 조작할 수 있게 된다

 

SQL SERVER  의 경우는..?

1. auto commit : 자동 commit 이라서 따로 commit 이나 rollback 을 처리할 필요가 없다고 한다

2. 암시적 트랜잭션 : oracle 과 같은 방식(시작은 DBMS, 끝은 사용자가 수동으로). 인스턴스/세션 단위 설정 가능

3. 명시적 트랜잭션 : 시작과 끝 모두 사용자가 수동으로 지정한다. 시작: begin tran 끝: commit/rollback

 

 

 

 

❏ ROLLBACK

 

 - 테이블 내 조작한 데이터에 대해서 commit 이전에 변경사항을 취소하는 명령

 - 관련된 행에 대한 잠금이 풀리고 다른 사용자들이 데이터 변경을 할 수 있다

 - 애플리케이션의 이상 종료가 발생해도 트랜잭션이 모두 rollback 된다

 - 사용법은 rollback; 

 

SQL SERVER 의 경우는...?

 - 기본적으로 auto 라서 명시적트랜잭션 으로 해줘야한다.

 

 

 

 

❏ SAVEPOINT

 

 - 저장 점.  트랜잭션에 포함된 전체 작업을 롤백하는게 아니라. 현 시점 ~ savepoint 까지만 롤백한다.

 - 여러개의 저장점을 정의할 수 있고, 동일이름으로 정의했을 때 나중에 정의한게 유효하다.

 

 

 

 

 

 

❏ ROLLBACK 의 원리

 

 

- 특정 저장점까지 롤백하면 그 저장점 이후에 설정한 저장점이 무효가 된다.

  (예 : rollback 을 a 로 해버렸으면.. b 는 무효가되겠지 )

- 저장점 지정 없이 rollback 을 실행하면 맨 처음으로.

반응형
글이 도움이 되셨다면 공감과 광고 클릭 한번 부탁드려요! :)
감사합니다 ✨