SQL Server: проблема с транзакциями моментальных снимков с синонимами в Express Edition

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

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

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

установить моментальный снимок уровня изоляции транзакции
начать транзакцию
объявить @sQuery varchar(max)
установить @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


person Marc    schedule 05.03.2009    source источник


Ответы (2)


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

person Marc    schedule 30.03.2009

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

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

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

person Ed Harper    schedule 05.03.2009
comment
Перезапуск требуется только для того, чтобы убедиться, что ранее не было установлено соединение с DB2. Ошибка возникает независимо от прошедшего времени, если до этого не было установлено соединение с DB2. - person Marc; 06.03.2009
comment
Я проверил журнал сервера: ошибки нет. Он говорит, что Восстановление завершено и Запуск DB1/DB2. Кажется, все в порядке. - person Marc; 06.03.2009
comment
Похоже на ошибку в Express. Можно ли обойти это, запустив неудачную транзакцию после перезапуска службы базы данных. - person Ed Harper; 06.03.2009
comment
Извините, я не понимаю, что вы имеете в виду под неудачной транзакцией. Никак не могу решить эту проблему. Единственные исправления, которые я нашел, — это использование Developer Edition или изменение уровня изоляции транзакций, чтобы не использовать Snapshot, или создание фиктивного подключения к DB2 перед выполнением этого кода. - person Marc; 09.03.2009
comment
Я не считаю ни одно из этих 3 исправлений решением, кроме, может быть, третьего, но все же странно, что оно нужно. - person Marc; 09.03.2009
comment
Я почти уверен, что это ошибка; кажется, что с комбинацией функций, которые вы используете, что-то мешает синонимам кросс-базы данных правильно определить, что целевая база данных запущена, пока не будет выполнен первый (неудачный) оператор. - person Ed Harper; 10.03.2009
comment
Хорошо, большое спасибо за вашу помощь. Я посмотрю, как я могу подать отчет об ошибке для MS. Из того, что я прочитал через Google, это кажется почти невозможным... Может быть, у нас есть что-то через MSDN. - person Marc; 10.03.2009
comment
Я создал отчет об ошибке через Microsoft Connect: connect.microsoft.com /SQLServer/обратная связь/ - person Marc; 10.03.2009
comment
Microsoft ответила в MS Connect. Проблема была с опцией AUTO_CLOSE. Смотрите мой ответ на этот вопрос. В очередной раз благодарим за помощь! - person Marc; 30.03.2009