Простая модель восстановления SQL Server 2012 с LOG_BACKUP log_reuse_wait_desc

11

Пока я занимаюсь собственным расследованием, кто-нибудь знает, почему база данных в SIMPLEмодели восстановления имеет LOG_BACKUPдля log_reuse_wait_desc?

SQL Server 2012 SP1. База данных создана всего несколько недель назад. Нет репликации, нет зеркалирования, нет доставки журналов, и никогда не было ни одного из них.

Мы сделали резервную копию базы данных и восстановили ее в другом экземпляре, это видно SIMPLEи NOTHINGв log_reuse_waitдругом экземпляре. Но я не думаю, что восстановление в другой экземпляр - это хороший способ воспроизвести проблему, поскольку операция восстановления выполняет откат / откат транзакций.

Travis
источник

Ответы:

11

Хорошо, провел вчера день и ночь, исследуя, проверяя и пытаясь воспроизвести проблему. Нашли основную причину:

MODELбаза данных установлена ​​для SIMPLEмодели восстановления.

Если для базы данных модели задана SIMPLEмодель восстановления, а пользовательские базы данных создаются с SIMPLEиспользованием модели восстановления, SQL Server каким-то образом обрабатывает ее так, как если бы она была в FULLмодели восстановления. Отсюда и ожидание LOG_BACKUPусечения журнала.

Я перечислил шаги в этой ссылке, чтобы показать, как я воспроизвел проблему.

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

Это описано в статье 2830400 базы знаний Майкрософт и исправлено в SQL Server 2012 SP1 CU4 и RTM CU7:

Travis
источник