1

SQL Server 2005 데이터베이스에 대해 COM 데이터 액세스 계층을 사용하는 대규모 웹 응용 프로그램이 있습니다. 기본적으로 격리 수준은 READ_COMMITTED입니다. 이제 READ_COMMITTED_SNAPSHOT 격리 수준의 작동 방식을 이해했으며 MSDN을 읽으면 투명하게 설정할 수 있다고합니다. 그러나 나는 여전히 회의적이다. :) 구현 방식으로 READ_COMMITTED에서 READ_COMMITTED_SNAPSHOT으로 변경하면 내 응용 프로그램이 중단되지 않습니다 (응용 프로그램이 모든 것을 책으로 가정하지 않는다는 것을 보장합니까?)? COM 레이어에 추가 예외가 발생하지 않습니까? 트랜잭션 의미론은 동일합니까?응용 프로그램을 안전하게 사용 READ_COMMITTED_SNAPSHOT?

추신. 구현 방식에 따르면, READ_COMMITTED_SNAPSHOT 격리 수준이 구현 된 행을 따라 무언가를 의미합니다 intentionally정확히을 잠금으로 대신 사용하여 READ_COMMITTED로 작업 할 수 있습니까?

이 차단 모드로 전환 한 경험이나 경험을 이용해 주셔서 감사합니다.

답변

1

아니요, 이들은 동일한 동작을하지 않습니다. READ_COMMITTED는 잠금으로 더티 읽기를 보장하지 않으며 READ_COMMITTED_SNAPSHOT은 테이블의 스냅 샷을 찍음으로써이를 보장합니다.

READ_COMMITTED_SNAPSHOT을 사용하면 트랜잭션이 트랜잭션과 동시에 실행중인 다른 세션에 의해 변경된 이전 데이터를 읽을 수 있습니다.

대부분의 경우 응용 프로그램 논리가 손상되지 않지만 특정 응용 프로그램이 잠금 동작에 의존하지 않는다고 보장 할 수는 없습니다.

격리 수준을 안전하게 변경하는 유일한 방법은 모든 데이터베이스 코드를 감사하고 문제가있을 수 있는지 확인하는 것입니다.

관련 문제