SQL Server - противоречивое поведение при чтении незафиксированных изменений одной и той же транзакции - PullRequest
1 голос
/ 22 апреля 2009

Работая с сервером SQL с уровнем изоляции «считывание зафиксированного снимка», мы регулярно записываем данные в базу данных и читаем их далее в контексте той же транзакции. Обычно при чтении из базы данных мы видим наши собственные незафиксированные изменения, но только зафиксированные изменения, сделанные другими. Мы предположили, что это ожидаемое поведение.

Теперь мы обнаружили, что в некоторых относительно редких случаях мы не видим записанные нами значения - только ранее зафиксированные значения.

Есть идеи, что может быть причиной несоответствия?

Ответы [ 2 ]

0 голосов
/ 20 мая 2009

Оказывается, это известное несоответствие в SQL Server: когда вы читаете из базы данных, вы обычно видите незавершенные изменения вашей собственной транзакции (на всех уровнях изоляции), но это не всегда гарантируется. Обходной путь в моем случае заключался в использовании with (readuncommitted), доверяя механизму блокировки на уровне приложения, который предотвращает одновременное изменение одних и тех же данных.

Я получил один и тот же ответ от двух независимых экспертов по базам данных. К сожалению, я не нашел никакой письменной ссылки на проблему.

0 голосов
/ 22 апреля 2009

Есть несколько хороших статей о том, что может пойти не так. Возможно, они могли бы помочь

Крейг Фридман, Сериализуемый и Уровень изоляции моментального снимка Черная / белая мраморная аналогия

Уго Корнелис, 4 статьи "Изоляция моментального снимка: угроза целостности" : DRI / FK бесшумно переходят на разные уровни изоляции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...