Identifique a causa raiz do motivo pelo qual o banco de dados está bloqueado no estado RESTORING

10

Sei que existem perguntas que resolvem o problema de um banco de dados ficar parado no RESTORINGestado e usaram essas soluções para colocar manualmente o banco de dados on-line novamente, mas meu cenário é um pouco diferente.

Tenho uma restauração automatizada usando scripts do Powershell que restaura uma cópia da produção em uma instância de DEV. Os scripts permanecem inalterados por cerca de um ano e, ocasionalmente, o processo de restauração termina, mas o banco de dados restaurado fica parado no RESTORINGestado (às vezes o script funciona bem, às vezes falha dessa forma).

Toda vez, se eu reexecutar manualmente o processo, ele funciona ou se eu restauro manualmente o banco de dados da interface do usuário do SSMS ou através do T-SQL, ele é concluído sem problemas.

Encontrei respostas recomendadas para executar CHECKDBno banco de dados restaurado, mas nada saiu como causa para esse problema.

Como os scripts de restauração restauram um backup COMPLETO do banco de dados e usam uma "WITH RECOVERY"opção, estou tentando descobrir o que pode estar parando o processo de restauração, embora eu esteja realmente restaurando-o usando "WITH RECOVERY".

Todas as sugestões são realmente apreciadas, pois estou tentando entender por que isso está acontecendo de tempos em tempos.

Eu gostaria muito de resolver a causa raiz do problema, em vez de tratar os sintomas, que é restaurar manualmente o banco de dados mais uma vez.

Atualizar:

Github Gist como @Brent recomendado - aqui .

Radu Gheorghiu
fonte
11
Você pode obter a resposta nos logs do SQL Server e no visualizador de eventos, verificou? Existe algum problema de espaço acontecendo, porque isso pode fazer com que o estado de restauração fique travado. Você verifica a integridade do backup antes de restaurar? Como é o seu subsistema de armazenamento
shanky
@ Shank, vou dar uma olhada nelas, embora não tenha acesso direto a essas informações (preciso me familiarizar com o administrador da SAN). A integridade do backup está configurada para ser verificada ao fazer backup e ao gravar no disco.
Radu Gheorghiu
11
O que o log de erros do SQL Server diz? Tente executar EXEC sys.xp_readerrorlog 0,1;- procure mensagens durante a operação de restauração.
Max Vernon
@MaxVernon O log de erros a partir do momento em que a restauração ocorreu . Verifiquei a mensagem de erro e parece recomendável verificar o espaço em disco, o que é suficiente. Eu vou cavar mais fundo e ver o que posso encontrar, mas em um rápido olhar isso poderia expandir muito e teria me olhando para um monte de coisas .
Radu Gheorghiu

Respostas:

8

A navalha de Occam sugere começar com o óbvio:

Se o seu script às vezes deixar um banco de dados em estado de restauração, depure o script.

Comece registrando o que está fazendo em uma tabela ou arquivo. Em seguida, quando você terminar com o banco de dados em estado de restauração, volte pelos seus logs para ver o que deu errado. (Se você quer um segundo olhar da comunidade, tente fazer o upload do seu script como Gistub Gist, mas lembre-se de que quanto maior, mais difícil será para as pessoas encontrarem bugs.)

Se você não quiser fazer isso, tente executar um rastreio Profiler ou Extended Events para rastrear os eventos de restauração, mas seja avisado - é muito mais difícil do que parece. (Leia os comentários nessa postagem para obter ainda mais idéias dos leitores que eles tentaram e falharam.)

Brent Ozar
fonte
Obrigado Brent, estas são algumas boas orientações! Voltarei com uma atualização quando tiver mais informações. No momento, o DB está bom, verei o que acontece quando o processo for executado novamente amanhã de manhã.
Radu Gheorghiu