트랜잭션 격리 수준
ANSI 표준 격리 수준
- Read Uncommitted
- Commit 되지 않은 읽기
- 트랜잭션에서 처리 중인 아직 Commit 되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용
- Read Committed(Oracle 기본)
- Commit된 읽기
- 트랜잭션이 Commit 확정된 데이터만 다른 트랜잭션이 읽도록 허용
- Repeatable Read
- 반복 읽기
- 트랜잭션 내에서 쿼리를 두 번 이상 수행할 때 첫 번째 쿼리에 있던 레코드가 사라지거나 값이 바뀌는 현상을 방지
- Serializable
- 직렬화 기능
- 트랜잭션 내에서 쿼리를 두 번 이상 수행할 때 첫 번째 쿼리에 있던 레코드가 사라지거나 값이 바뀌지 않음은 물론 새로운 레코드가 나타나지도 않음
격리 수준 완화되면서 직렬화에서 없었던 현상 발생
- Dirty Read
- Dirty 읽기
- 어떤 트랜잭션이 Commit되기 전 다른 트랜잭션에서 데이터 읽음
- 변경 후 아직 Commit되지 않은 값을 읽었는데 변경을 가한 트랜잭션이 최종적으로 롤백 된다면 그 값을 읽은 트랜잭션은 비 일관된 상태에 놓이게 됨
- Non-Repeatable Read
- 애매한 읽기
- 어떤 트랜잭션이 이전에 읽은 데이터를 다시 읽어 들일 때 2회 이후의 결과가 1회 때와 다른 현상
- 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타나는 현상
- Phantom Read
- 유령 읽기
- 어떤 트랜잭션을 읽을 때 선택할 수 있는 데이터가 나타나거나 사라지는 현상
- 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데 첫 번째 쿼리에서 없던 유령 레코드가 두 번째 쿼리에서 나타나는 현상
Leave a comment