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