2009-04-22 3 views
1

격리 수준이 "커밋 된 스냅 숏 읽기"인 SQL 서버를 사용하여 데이터베이스에 데이터를 정기적으로 쓰고 같은 트랜잭션의 컨텍스트에서 계속 읽습니다. 일반적으로 데이터베이스에서 읽을 때 우리는 커밋되지 않은 변경 사항을 보지만 다른 사용자가 변경 한 사항 만 커밋합니다. 이것이 예상 된 동작이라고 가정했습니다.SQL Server - 동일한 트랜잭션의 커밋되지 않은 변경 내용을 읽을 때 일관성없는 동작이 발생했습니다.

일부 비교적 드문 경우지만 우리가 작성한 값은 이전에 커밋 된 값만 표시된다는 것을 알게되었습니다.

무엇이 불일치의 원인 일 수 있습니까?

답변

0

그것은 밝혀로 변경하는이 SQL Server의 알려진 불일치입니다 : 때를 데이터베이스에서 읽으면 일반적으로 트랜잭션의 커밋되지 않은 변경 사항이 모든 격리 수준에서 표시되지만 이는 항상 보장되는 것은 아닙니다. 필자의 경우에는 동일한 데이터를 동시에 수정하지 못하게하는 응용 프로그램 수준의 잠금 메커니즘을 신뢰하면서 with (readuncommitted)을 사용했습니다.

저는 두 명의 독립 데이터베이스 전문가로부터 동일한 대답을 받았습니다. 불행히도이 문제에 대한 서면 참조를 찾지 못했습니다.

0

Ther는 무엇이 잘못 될 수 있는지에 대한 좋은 기사입니다. 아마도 그들은 도움이 될 수 있습니다

Craig Freedman, Serializable vs. Snapshot Isolation Level 블랙/화이트 대리석 비유

Hugo Kornelis, 4 articles "Snapshot isolation: A threat for integrity" : DRI/FKS는 자동으로 다른 격리 수준

+0

좋은 기사이지만 동일한 트랜잭션에서 수정 된 데이터를 읽는 문제에 대해서는 다루지 않습니다. –

+0

첫 번째 기사에서는 검은 색/흰색 대리석에 대해 설명합니다. 롤백 중이 니? 두 번째 네 번째는 격리 수준을 변경하는 FK를 언급합니다. 동일한 TXN에서 커밋 된 사전 변경 데이터를 읽은 경우 롤백 되었습니까? 또는 귀하의 격리 수준이 변경되었습니다 ... 귀하의 사전 변경된 커밋 된 데이터를 읽을 수 있도록 사물을 혼동시킬 수 있습니다 – gbn

+0

내 문제는 롤백과 관련이 없습니다 (별도의 답변 참조). –