2009-03-05 5 views
3

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

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

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

set transaction isolation level snapshot
begin transaction
declare @sQuery varchar(max)
set @sQuery = 'Select * from synToSomeTableInDB2'
exec (@sQuery)
commit transaction

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

Snapshot isolation transaction failed in database '...' because the database was not recovered when the current transaction was started. Retry the transaction after the database has recovered.

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

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

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

ответ

3

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

1

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

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

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

+0

Перезагрузка требуется только для того, чтобы убедиться, что соединение с DB2 не было выполнено до этого. Ошибка происходит независимо от времени, прошедшего до тех пор, пока ранее не было установлено соединение с DB2. – Marc

+0

Я проверил журнал сервера: ошибок нет. В нем говорится: «Восстановление завершено» и «Запуск DB1/DB2». Кажется, все в порядке. – Marc

+0

Звучит как ошибка в Express. Можете ли вы обойти его, выполнив неудачную транзакцию после перезапуска службы базы данных. –