본문 바로가기

Oracle

10. 트랜젝션

트랜잭션(Transaction)이란?

  - 트랜잭션은 업무처리를 위한 논리적인 작업 단위를 말합니다.


1. 트랜잭션의 특징

1. 원자성(Atomicity) 

  :  트랜잭션은 더이상 분해가 불가능한 업무의 최소 단위이므로, 전부 처리되거나, 아예 하나도 처리되지 않아야 합니다.


2. 일관성(Consistency)

  : 일관된 상태의 데이터베이스에서 하나의 트랜잭션이 성공적으로 작업을 완료하고 난 후에도 데이터베이스는 여전히 일관된 상태여야 합니다.


3. 격리성,독립성(Isolation)

  : 하나의 트랜잭션이 작업을 하고 있을 때 다른 트랜잭션은 접근할 수

 없습니다.


 가. 낮은 단계의 격리성 수준에서 발생할 수 있는 현상들입니다.

   1) Dirty Read : 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은데이터를 읽는 것을 의미합니다.

   2) Non-Repeatable Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정,삭제하여 두 쿼리의 결과가 다르게 나타나는 현상입니다.

   3) Phantom Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫 번째 쿼리에서 없던 유령(Phantom) 레코드가 두 번째 쿼리에서 나타나는 현상입니다.

  

  나. 트랜잭션의 격리성 수준

   1) Read Uncommitted : 트랜잭션에서 처리 중인 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용하는 것 입니다.

    2) Read Committed : 트랜잭션이 커밋되어 확정된 데이터만 다른 트랜잭션이 읽도록 허용함으로써, Dirty Read를 방지해줌. 하지만, 커밋된 데이터만 읽더라도  Non-Repeatable Read Phantom Read현상을 막지 합니다.

    3) Repeatable Read : 트랜잭션 내에서 쿼리를 두 번 이상 수행할 때, 첫 번째 쿼리에 있던 레코드가 사라지거나 값이 바뀌는 현상을 방지해 줍니다. 하지만, Phantom Read 현상을 막지 못합니다.

    4) Serializable Read : 트랜잭션 내에서 쿼리를 두 번 이상 수행할 때, 첫 번째 쿼리에 있던 레코드가 사라지거나, 값이 바뀌지 않음은 물론, 세로운 레코드가 나타나지도 않습니다.


레벨

Dirty Read

Non-Repeatable Read

Phantom Read

Read Uncommitted

가능

가능

가능

Read Committed

불가능

가능

가능

Repeatable Read

불가능

불가능

가능

Serializable Read

불가능

불가능

불가능


4. 영속성(Durability)

  : 트랜잭션이 일단 실행을 성공적으로 완료하면, 그 결과는 데이터베이스에 영속적으로 저장되어야 합니다.



※ 주의사항

  • 모든 DBMS가 4가지 레벨을 다 지원하지 않습니다
  • SQL Server와 DB2는 4가지 레벨을 다 지원하지만, 오라클은 Read Committed와 Serializable Read만 지원합니다.
  • (Oracle에서 Repeatable Read를 구현하려면 for update 구문을 이용하면 됩니다.)
  • 대부분의 DBMS는 Read Committed를 기본 트랜잭션 격리성 수준으로 사용하고 있습니다.


'Oracle' 카테고리의 다른 글

MVC2  (0) 2018.05.02
jsp+db 회원가입, 로그인  (0) 2018.05.01
9.DML  (0) 2018.04.23
8.DDL  (0) 2018.04.23
7.그룹함수  (0) 2018.04.23