Applies ToSQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2012 Service Pack 3 SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Enterprise Core

Проблемы

Рассмотрим следующий сценарий.

  • Вы используете Microsoft SQL Server 2016, 2014 или 2012.

  • У вас есть база данных, которая входит в группу доступности AlwaysOn.

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

  • Первичная реплика отправляет все изменения, которые записываются в журнал транзакций, во вторичную реплику.

  • На вторичной реплике потоки повторения применяют изменения из журнала транзакций к базе данных, которая входит в группу доступности.

В этом случае реплика приостанавливается. Кроме того, может появиться сообщение об ошибке, подобное следующему:

<метка времени> spid41s Error: 3456, серьезность: 21, состояние: 1. <отметки времени> spid41s не удалось вернуть запись журнала (#), для идентификатора транзакции (#), на странице (#), базы данных "<dbname>" (идентификатор базы данных #). Страница: LSN = (#), единица распределения = #, тип = #. Журнал: код операции = #, контекст #, PrevPageLSN: (#). Восстановите базу данных из резервной копии или восстановите базу данных. <метка времени> перемещение данных групп доступности spid41s AlwaysOn для базы данных "<dbname>" приостановлено по следующей причине: "System" (идентификатор источника 2; Строка источника: "SUSPEND_FROM_REDO"). Чтобы возобновить движение данных в базе данных, необходимо возобновить базу данных вручную. Сведения о том, как возобновить работу базы данных доступности, можно найти в статье SQL Server Books Online. <метку времени> spid41s Error: 3313, серьезность: 21, состояние: 2. <отметки времени> spid41s во время повторного выполнения зарегистрированной операции в базе данных "<dbname>" произошла ошибка, связанная с ИДЕНТИФИКАТОРом записи журнала (#). Как правило, в службе журнала событий Windows конкретный сбой уже зарегистрирован как ошибка. Восстановите базу данных из полной резервной копии или восстановите базу данных.

Причина

Эта проблема возникает в том случае, если изменения применяются во время повторного выполнения, если ядро СУБД обнаруживает неупорядоченные регистрационные номера LSN на системных страницах (GAM, PFS).

Решение

Эта проблема впервые устранена в следующем накопительном обновлении SQL Server:

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

Обновление препятствует возникновению этой проблемы. Если проблема уже возникла, выполните указанные ниже действия, чтобы повторно присоединиться к группе доступности AlwaysOn.

  1. Удаление существующей вторичной реплики AlwaysOn.

  2. Чтобы удалить незанятое место из базы данных, выполните следующую команду в уязвимых файлах данных:

    DBCC SHRINKFILE(<file_id>, TRUNCATEONLY)

  3. Создавайте резервные копии файлов базы данных и журнала.

  4. Восстановите базу данных и журналы в дополнительной реплике AlwaysOn.

  5. Присоединитесь к группе доступности AlwaysOn.

Статус

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

Ссылки

Ознакомьтесь с терминологией , которую корпорация Майкрософт использует для описания обновлений программного обеспечения.

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

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

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

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