У меня проблема, которую я не могу решить. У моей команды разработчиков есть набор модульных тестов C #, которые запускаются на базе данных модульных тестов. Перед каждым тестом база данных должна быть восстановлена до начальной точки. Самый быстрый способ достичь этого:
- Отключить базу данных.
- Перезаписать файлы .mdf и .ldf резервными копиями с подкладкой.
- Присоединить базу данных.
Я выполняю эти действия, вызывая команды Transact SQL из C #.
Проблема, с которой я столкнулся, заключается в том, что примерно в 50% случаев открытие соединения с базой данных модульных тестов завершится неудачей - исключения бывают разных типов - но, похоже, все они предполагают, что база данных не существует. Если я добавлю команду «sleep» после оператора Attach, тогда базу данных можно будет каждый раз успешно открывать. Моя интерпретация этого заключается в том, что должен быть какой-то фоновый процесс SQL Server, который запускается на базе данных, чтобы завершить перевод базы данных в оперативный режим. Таким образом, непосредственно после выполнения процедуры sp_attach_db база данных фактически не готова к использованию до истечения нескольких миллисекунд.
Конечно, мое решение может заключаться в том, чтобы выполнять оператор «сна» после каждого подключения к базе данных, но существует 800 таких тестов, поэтому крайне важно, чтобы процесс отсоединения / восстановления / подключения был максимально быстрым.
У кого-нибудь есть опыт решения этой проблемы? Кто-нибудь знает, почему база данных не сразу доступна для принятия соединения? Кто-нибудь знает, как я могу определить, когда база данных готова принять соединение.
Заранее спасибо.