독서하는 개발자's Blog

반응형

트랜잭션의 특성  (atomicity, consistency, isolation, durability)

  • 원자성 : 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다.
  • 일관성 : 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다.
  • 고립성 : 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다.
  • 지속성 : 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.

 

트랜잭션에 대한 격리성이 낮은 경우 발생할 수 있는 문제점

  1. Dirty Read :  다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽는 것
  2. Non-Repeatable Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타나는 현상
  3. Phantom Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫번째 쿼리에 없던 유령 레코드가 두번째 쿼리에서 나타나는 현상

 

트랜잭션?

  • 트랜잭션은 데이터베이스의 논리적 연산단위로서 밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조직을 가리킨다.
  • 트랜잭션의 종료를 위한 대표적 명령어로서는 데이터에 대한 변경사항을 데이터베이스의 영구적으로 반영하는 Commit(커밋)과 데이터에 대한 변경사항을 모두 폐기하고 변경전의 상태로 되돌리는 Rollback(롤백)이 있다.

 

  1. BEGIN TRANSACTION으로 트랜잭션을 시작
  2. COMMIT TRANSACTIONE 또는 ROLLBACK TRANSACTION으로 트랜잭션을 종료한다.

ROLLBACK 구문을 만나면 최초의 BEGIN TRANSACTION 시점까지 모두 ROLLBACK이 수행된다. (저장점이 없는 경우!)

단, 저장점(SAVEPOINT)을 정의하면 롤백할 때, 트랜잭션에 포함된 전체 작업을 롤백하는 것이 아니라 현 시점에서 SAVEPOINT까지 트랜잭션의 일부만 롤백할 수 있다.

 

트랜잭션 구문

[ORACLE]

SAVEPOINT SVPT1;

...

ROLLBACK TO SVPT1;

 

[SQL Server]

SAVE TRANSACTION SVTP1;

...

ROLLBACK TRANSACTION SVTP1;

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band