Pergunta

Temos 2 bancos de dados, diga DB1 e DB2.
DB1 contém todos os procedimentos armazenados cujo acesso também dados em DB2.
usos DB1 sinônimos para acessar as tabelas no DB2.
(Usando sinônimos é uma exigência na nossa situação)

Isso funciona perfeitamente bem em todas as situações com o SQL Server 2005 Developer Edition.

No entanto, no Express Edition, que receber uma exceção quando fazemos o seguinte:
1 Reinicie o SQL Server
2 Execute o seguinte código dentro DB1:

definir nível de isolamento de transação de instantâneo
começar a transação
varchar declarar @sQuery (max)
conjunto @sQuery = 'Select * from synToSomeTableInDB2'
exec (@sQuery)
confirmar a transação

Isto irá resultar no seguinte erro:

Snapshot transação de isolamento falhou no banco de dados '...' porque o banco de dados não foi recuperado quando a transação atual foi iniciado. Repita a operação depois que o banco de dados recuperado.

A mesma consulta seleção passa bem quando usado sem o EXEC ou quando executado no Developer Edition.
Reiniciar o servidor no passo 1 é importante, uma vez que uma ligação foi feita para o DB2, o código é executado também bem no SQL Server Express Edition.

Alguém tem uma idéia do que é isso? Precisamos ser capazes de usar EXEC para algumas consultas dinâmicas. Nós já verificado MSDN, procurou Google, ... Qualquer ajuda é muito apreciada.

--- Editar: 10 09 de março
Como discutido com Ed Harper abaixo, eu já entrou com um relatório de bug para isso.
Consulte https://connect.microsoft.com/SQLServer/feedback/ViewFeedback aspx? FeedbackID = 422150

Foi útil?

Solução

Como descobri via Microsoft Connect , o problema é que por padrão no SQL Server Express Edition de AUTO_CLOSE opção é definida em true .
Alterar esta opção para false corrige o problema.

Outras dicas

A mensagem de erro sugere que a consulta falha porque o servidor SQL ainda está se recuperando o banco de dados após a reinicialização do serviço quando você executar a consulta.

Será que o erro ocorre sempre na primeira tentativa de executar esse código, independentemente do tempo decorrido desde que o serviço foi reiniciado?

Pode confirmar partir do registo de SQL Server que o banco de dados está se recuperando corretamente após a reinicialização?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top