다음 문제를 풀어보세요.


트랜잭션 T1, T2가 수행되는 다음 그림에서 T1의 연산결과(x+100)가 T2의 연산결과(x*2)로 인해 바르게 저장되지 않는 현상이 발생할 수 있다. 이 같은 현상을 무엇이라고 하는가?



1. 갱신 손실(lost update)

2. 오손 읽기(dirty read)

3. 지연 갱신(deferred update)

4. 갱신 충돌(update conflict)




트랜잭션 격리성 수준 (Transaction Isolation Level)


Isolation Level 

Dirty Read 

Non Repeatable Read 

Phantom Read 

 Read Uncommitted

Permitted 

Permitted 

Permitted 

 Read Committed

---

 Permitted

 Permitted

 Repeatable Read

---

---

 Permitted

 Serializable

---

---

---



Level - 0 ( = Read Uncommitted)


① 커밋되지 않은 데이터를 다른 트랜잭션에서 읽는 것을 허용

② Dirty Read, Non-Repeatable Read, Phantom Read 현상 발생


Dirty Read

다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽는것을 의미한다. 커밋되지 않은 값을 읽었는데, 그 트랜잭션이 롤백(Rollback) 된다면 그 값을 읽은 트랜잭션은 비일관된 상태에 놓이게 된다.


Phantom Read

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



Level - 1 ( = Read Committed)


① 트랜잭션이 커밋되어 확정된 데이터만 읽는 것을 허용함으로써 Dirty Read를 방지해줌

② Non-Repeatable Read, Phantom Read 현상 발생



Level - 2 ( = Repeatable Read)


① 트랜잭션 내에서 쿼리를 두번 이상 수행할 때, 첫번째 쿼리에 있던 레코드가 사라지거나 값이 바뀌는 현상을 방지해 줌.

② Phantom Read 현상은 발생



Level - 3 ( = Serializable Read)


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

② 완벽한 일관성 제공




+ Recent posts