다음을 통해 공유


커서 트랜잭션 격리 수준

특정 커서의 트랜잭션 잠금 동작은 커서 동시성 설정의 잠금 동작, SELECT 커서에 지정된 잠금 힌트 및 트랜잭션 격리 수준 옵션을 통해 결정됩니다.

MicrosoftSQL Server에서는 다음과 같은 커서 트랜잭션 격리 수준이 지원됩니다.

  • 커밋된 읽기
    SQL Server에서 행을 커서로 읽는 동안 공유 잠금을 획득하지만 행을 읽고 난 직후에 잠금을 해제합니다. 공유 잠금 요청은 배타적 잠금에 의해 차단되므로 다른 태스크가 업데이트했지만 아직 커밋하지 않은 행을 커서가 읽을 수 없습니다. 커밋된 읽기는 SQL Server와 ODBC 모두에 대한 기본 격리 수준 설정입니다.

  • 커밋되지 않은 읽기
    SQL Server에서 행을 커서로 읽는 동안 잠금을 요청하지 않으며 배타 잠금을 보장하지 않습니다. 업데이트되었지만 아직 커밋되지 않은 값으로 커서를 채울 수 있습니다. SQL Server의 모든 잠금 트랜잭션 제어 메커니즘이 무시됩니다.

  • 반복 읽기 또는 순차 가능
    SQL Server에서 READ COMMITTED 등을 통해 커서로 행을 읽을 때 각 행에 대해 공유 잠금을 요청합니다. 그러나 트랜잭션 내에 커서가 열려 있으면 행을 읽은 후 해제하지 않고 트랜잭션이 끝날 때까지 공유 잠금을 보유합니다. 이렇게 하면 SELECT 문에서 HOLDLOCK을 지정하는 것과 같은 결과가 나타납니다.

  • 스냅숏
    SQL Server에서 행을 커서로 읽는 동안 잠금을 요청하지 않으며 배타 잠금을 보장하지 않습니다. 트랜잭션이 처음 시작된 당시의 값으로 커서가 채워집니다. 스크롤 잠금은 스냅숏 격리의 사용과 관계없이 요청됩니다.