Estou trabalhando em um conjunto de scripts (no SQL Server Management Studio) para corrigir certas inconsistências de dados em um banco de dados de clientes (SQL Server 2008 R2).
Peguei um .bak
arquivo com o banco de dados e o restaurei em meu sistema, por exemplo, SampleDatabase
. Agora estou trabalhando em meus scripts e, depois de um tempo, consertei a maioria dos problemas.
Agora, gostaria de restaurar o .bak
arquivo original novamente, para ter certeza de que todos os meus scripts são executados nos dados originais e fazem o que devem fazer. Fecho todas as janelas no SQL Server Management Studio, abro uma nova janela de consulta em meu master
banco de dados e emito meu RESTORE
comando:
RESTORE DATABASE [SampleDatabase]
FROM DISK = N'c:\tmp\sample.bak'
WITH FILE = 1,
MOVE N'Sample_PRIMARY' TO N'c:\mssql\Sample_PRIMARY.MDF',
MOVE N'Sample_LOG' TO N'C:\mssql\Sample_LOG.LDF',
NOUNLOAD, REPLACE, STATS = 5
Infelizmente, agora recebo uma mensagem de erro:
Msg 3101, Nível 16, Estado 1, Linha 2
Não foi possível obter acesso exclusivo porque o banco de dados está em uso.
Msg 3013, Nível 16, Estado 1, Linha 2
RESTORE DATABASE está encerrando de forma anormal.
o que parece um pouco estranho, já que me certifiquei de ter fechado todo o SSMS Windows nesse banco de dados - por que ainda está em uso?
Como posso resolver essa situação o mais rápido possível? A única solução que conheço que funciona agora é reiniciar o MSSQLSERVER
serviço - mas esse é um processo bastante demorado e um tanto complicado ...
Existe outra maneira mais eficiente e simplificada de deixar esse banco de dados "fora de uso" para que eu possa restaurar o backup sobre ele novamente para verificar meus scripts?
Variantes dos seguintes usos
ROLLBACK IMMEDIATE
são comuns:Observe o modo SQLCMD .
Tente restringir o acesso a restrito_user nas opções do banco de dados. Faça o que quiser e depois volte para multiusuário.