SQL Server: проблема транзакции моментального снимка с синонимами в Express Edition - PullRequest
3 голосов
/ 05 марта 2009

У нас есть 2 базы данных, скажем, DB1 и DB2.
DB1 содержит все хранимые процедуры, которые обращаются также к данным в DB2.
DB1 использует синонимы для доступа к таблицам в DB2.
(Использование синонимов является требованием в нашей ситуации)

Это прекрасно работает во всех ситуациях с SQL Server 2005 Developer Edition.

Однако в Express Edition мы получаем исключение, когда делаем следующее:
1 Перезагрузите SQL Server
2 Выполните следующий код в DB1:

установить снимок уровня изоляции транзакции
начать транзакцию
объявить @sQuery varchar (макс.)
set @sQuery = 'Select * from synToSomeTableInDB2'
exec (@sQuery)
совершить транзакцию

Это приведет к следующей ошибке:

Ошибка транзакции изоляции моментального снимка в базе данных «...», поскольку база данных не была восстановлена ​​при запуске текущей транзакции. Повторите транзакцию после восстановления базы данных.

Тот же самый запрос выбора проходит нормально, когда используется без EXEC или при запуске в Developer Edition.
Перезапуск сервера на шаге 1 важен, так как после подключения к DB2 код также отлично работает на SQL Server Express Edition.

У кого-нибудь есть идея, что это? Нам нужно иметь возможность использовать EXEC для некоторых динамических запросов. Мы уже проверили MSDN, искали Google, ... Любая помощь с благодарностью.

--- Изменить: 10 марта 09
Как обсуждалось с Эд Харпером ниже, я подал отчет об ошибке для этого.
Смотри https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=422150

Ответы [ 2 ]

3 голосов
/ 30 марта 2009

Как выяснилось через Microsoft Connect , проблема в том, что по умолчанию в SQL Server Express Edition опция AUTO_CLOSE установлена ​​на true .
Изменение этой опции на false устраняет проблему.

1 голос
/ 05 марта 2009

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

Всегда ли ошибка возникает при первой попытке запустить этот код, независимо от времени, прошедшего с момента перезапуска службы?

Можете ли вы подтвердить из журнала SQL Server, что база данных восстанавливается правильно после перезапуска?

...