Перейти к основному контенту
Поддержка
Войдите с помощью учетной записи Майкрософт
Войдите или создайте учетную запись.
Здравствуйте,
Выберите другую учетную запись.
У вас несколько учетных записей
Выберите учетную запись, с помощью которой нужно войти.

Проблемы

При использовании зеркального отображения базы данных в Microsoft SQL Server 2012 или Microsoft SQL Server 2014 может быть достигнуто условие утверждения и зеркальное отображение базы данных переходит в состояние SUSPENDED.

Причина

Эта проблема возникает из-за того, что при распределении новой страницы SQL Server получает на новой странице блокировку X. SQL Server поместит hobt_id (идентификатор кучи или B-Tree), к которому Новая страница будет находиться в запросе на блокировку. Тем не менее, SQL Server не может поместить hobt_id в журнал зеркального отображения и приводит к разным режимам блокировки между основной и зеркальной. Подробнее об этом можно получить, как описано ниже.

  1. T1 удерживает блокировку IX на странице P1.

  2. T2 выполнение разбиения страницы на транзакции P1, выделение новой страницы P2, используется системная транзакция TX, которая удерживает блокировку X в P2. Здесь SQL Server не поместил hobt_id в журнал зеркального отображения.

  3. TX блокирует миграцию для T1 для перемещения блокировки IX с P1 на P2.

  4. TX зафиксирован, после T2 можно использовать страницу P2, а T2 получить другую блокировку IX на странице P2.

  5. Выделено T1, то T2 — это единственный пользователь, который удерживает блокировку IX для P2.

  6. После большого количества вставленных данных произойдет эскалация блокировки, на основном этапе T2 освобождается IX для P2, но на зеркале во время укрупнения блокировок T2 не освободило блокировку IX.

  7. После большого количества удалений страница P2 становится пустой и размещается.

  8. Для T3 требуется новая страница, поэтому для выделения P2 требуется блокировка X, но на зеркальной копии этот шаг не удался, так как на этапе 6.

На зеркальном сервере шаг 6 не освобождает блокировку IX, так как hobt_id в блоке блокировки является неправильным. Это неправильное hobt_id поступает на этапе 2, так как SQL Server не помещает hobt_id в журнал зеркального отображения. Обычно проблема не возникает из-за того, что передача на этапе 2 очень коротка, а блок блокировки с неправильным hobt_id будет освобожден при фиксации. Однако из-за миграции блокировок в step3 и описанных ниже действий (4 и 5) этот блок блокировки с неверным hobt_id сохраняется и, наконец, вызывает проблему. У основного компьютера нет этой ошибки, так как в действии 2 используется правильный hobt_id. Но запись журнала не имеет правильной hobt_id.

Все новые накопительные обновления для SQL Server содержат все исправления и все исправления для системы безопасности, которые были включены в предыдущий накопительный пакет обновления. Ознакомьтесь с самыми последними накопительными обновлениями для SQL Server.

Обходное решение

Чтобы обойти эту ошибку, повторно инициализируйте зеркало, чтобы завершить состояние SUSPENDED.

Статус

Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

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

Были ли сведения полезными?

Насколько вы удовлетворены качеством перевода?
Что повлияло на вашу оценку?
После нажатия кнопки "Отправить" ваш отзыв будет использован для улучшения продуктов и служб Майкрософт. Эти данные будут доступны для сбора ИТ-администратору. Заявление о конфиденциальности.

Спасибо за ваш отзыв!

×