Eu tenho uma instância do SQLSERVER 2008 com uma configuração de espera usando o envio de logs.
O servidor de produção executa um trabalho LSBACKUP a cada 30 minutos, envia-o para o servidor em espera e o servidor em espera LSRESTORE o log enviado.
O problema que estou tendo é que o trabalho LSRESTORE falhará se alguma sessão de usuário estiver acessando o banco de dados, mesmo que não tenha transações ativas contendo nenhuma operação de gravação.
Os bancos de dados estão no (Standby / Read-Only)
modo, portanto, não há operações de gravação que possam estar pendentes nele, simplesmente desenvolver as tabelas de banco de dados no SSMS bloqueará o trabalho LSRESTORE com o seguinte log de erros:
2017-02-14 09:29:22.87 *** Error: Exclusive access could not be obtained because the database is in use.
RESTORE LOG is terminating abnormally.(.Net SqlClient Data Provider) ***
A única solução que encontrei é quando isso acontece, posso definir o banco de dados como single_user e voltar para multi_user para limpar o erro. Eu também poderia colocar os comandos SQL no trabalho SQLAGENT em uma etapa antes da restauração, mas parece mais um hack do que uma correção!
ALTER DATABASE [db_name_goes_here] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [db_name_goes_here] SET MULTI_USER
Meu modo de espera pode ser protegido desse problema de alguma forma?
Quando você usa banco de dados secundário para processamento de consultas , você deve verificar