Проблемы
В Microsoft SQL Server Compact 3,5 рассмотрены следующие ситуации.
-
У вас две транзакции с сериализуемой изоляцией.
-
Обе транзакции пытаются выполнить операцию DML (запрос или DML) в той же таблице, которая включает подсказку блокировки TABLOCK или подсказку блокировки XLOCK.
В этом сценарии вы сталкиваетесь с взаимоблокировкой.
Причина
Эта проблема возникает из-за того, что обе транзакции ожидают друг друга для XLOCK. При компиляции запроса обе транзакции получают общую блокировку таблицы, а затем удерживает блокировку для сериализуемой изоляции. Когда обе транзакции пытаются выполнить операцию Execute, запрос в той же таблице, которая включает подсказку блокировки XLOCK, обе транзакции ожидают друг друга для XLOCK. Таким образом, происходит взаимоблокировка.Примечание.Эта проблема также возникает, когда обе транзакции выполняют операцию DML в той же таблице, которая включает подсказку блокировки TABLOCK.
Решение
SQL Server Compact 3,5 с пакетом обновления 2
Исправление для этой проблемы впервые выпущено в накопительном обновлении 2. Для получения дополнительных сведений о том, как получить этот накопительный пакет обновления для SQL Server 2008 R2, щелкните следующий номер статьи базы знаний Майкрософт:
2289547 Накопительное обновление 2 для SQL Server Compact 3,5 с пакетом обновления 2
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".
Дополнительная информация
Дополнительные сведения о взаимоблокировке можно найти на веб-сайте Microsoft Developer Network (MSDN) по следующему адресу:
ВзаимоблокировкамДополнительные сведения о DML можно найти на веб-сайте MSDN по следующему адресу:
ЯМДДополнительные сведения о терминах, используемых при описании обновлений программного обеспечения, см. в следующей статье базы знаний Майкрософт:
824684 Стандартные термины, используемые при описании обновлений программных продуктов Майкрософт