Получение ошибки при восстановлении журналов в среде LOG SHIPPING - PullRequest
1 голос
/ 28 сентября 2010

Я работаю с SQL SERVER 2005 SP2.

У меня достаточно долгое время работающая и стабильная среда LOG SHIPPING.

Вчера задание восстановления доставки журнала на сервере DR завершилось с ошибкой блокировки (журнал начинается с последней строки и идет вверх):

05:02:38.34  *** Error: The log backup file 'C:\database\LogShipping\20100927021501.trn' was verified but could not be applied to secondary database ''
05:02:37.42  *** Error: Could not apply log backup file 'C:\database\LogShipping\20100927021501.trn' to secondary database ''.
05:02:37.42  *** Error: Exclusive access could not be obtained because the database is in use.
05:02:17.04  Restored log backup file. Secondary DB: ''<c/> File: 'C:\database\LogShipping\.trn'
05:00:01.01  Disconnecting users. Secondary DB: ''
05:00:00.64  Starting transaction log restore. Secondary ID: 'f89bba95-6fa8-4ee3-8883-3bb3b63f6127'<nl/>
05:00:00.64  Retrieving restore settings. Secondary ID: 'f89bba95-6fa8-4ee3-8883-3bb3b63f6127'<nl/>
05:00:00.65  Retrieved common restore settings. Primary Server: ''<c/> Primary Database: ''<c/> 
Backup Destination Directory: 'C:\database\LogShipping'<c/> File Retention Period: 4320 minute(s)<nl/>
05:00:00.65  Retrieved database restore settings. Secondary Database: ''<c/> Restore Delay: 0<c/> Restore All: True<c/> Restore Mode: Standby<c/> 
Disconnect Users: True<c/> Last Restored File: C:\database\LogShipping\20100927014500.trn<c/> Block Size: Not Specified<c/> Buffer Count: Not Specified<c/> Max Transfer Size: Not Specified
05:00:00.54  ----- START OF TRANSACTION LOG RESTORE  -----

Следующее задание восстановления прошло без проблем, и оно восстановило ВСЕ журналы, даже самые старые.

Так что же случилось?

У меня установлен флажок «Отключить пользователей в базе данных при восстановлении резервных копий» установлен в конфигурации LOG SHIPPING.

Вы можете видеть в журнале выше, что есть этап ОТКЛЮЧЕНИЯ ПОЛЬЗОВАТЕЛЕЙ.

В моих поисках в Google я нахожу только ссылки, которые говорят мне поставить флажок выше или создать процедуру, которая убивает сеансы и запускает ее перед заданием восстановления.

Но - там было отключение пользователей перед восстановлением. возможно, аппликативный пользователь пытался соединить БД в доли секунды между окончанием восстановления первого журнала и восстановлением второго журнала?

Если так, как я могу предотвратить это?

Спасибо, Рони.

Ответы [ 3 ]

2 голосов
/ 01 июня 2011

Чтобы преодолеть это, установите свойство Retry Job для задания LS Restore SQL Agent.Это не было бы полностью глупым доказательством.Тем не менее, вы можете уменьшить вероятность подключения пользователя в эту долю секунды.Трех попыток должно быть достаточно.

1 голос
/ 03 октября 2011

Я тоже столкнулся с этим.Проблема в том, что, когда API доставки журналов уничтожает открытые соединения с базой данных, он запускает ALTER DATABASE SET SINGLE_USER WITH ROLLBACK IMMEDIATE.Технически, если сразу после этого происходит попытка входа из приложения в приложение, оно получит однопользовательский сеанс до доставки журналов.

0 голосов
/ 12 марта 2015

Ue Logon Trigger Включите и отключите до и после выполнения задания восстановления для конкретного пользователя или хоста, чтобы предотвратить установление соединений с БД в течение определенного периода времени.

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