SQL Server: Rebuild no database master sem backup – Parte 1
Fala pessoal, neste artigo venho trazer o primeiro assunto de 2021.
Cenário
Enfrentei um problema onde o serviço do SQL Server de um ambiente não iniciava. Ao tentar iniciar o serviço no SQL Configuration Manager, um erro bem genérico era gerado. Ao investigar o Event View do Windows, percebi o seguinte erro:
Ainda verificando os logs, identifiquei:
Investigando melhor, notei que mesmo com as atualizações do Windows Update desativadas no servidor, por algum motivo que ainda estou verificando, o SQL Server acabou sendo atualizado pelo windows update, e no meio do procedimento houve um erro ao tentar executar o script: ‘msdb110_upgrade.sql’ resultando na corrupção do database master.
Até ai um problema bem dos grandes. A primeira solução na cabeça foi pensar na restaurar o banco de dados master dos meus backups e resolver o problema, correto? É o velho ditado: “Só jesus salva, DBA tem que ter Backup”, o problema é que eu não tinha nenhum backup. Não vou entrar em detalhes pelo motivo de não ter o backup. Afinal, toda empresa tem suas particularidades.
E aí como faz? Ambiente indisponível, sem backup… vamos as propostas de soluções:
- Tentar usar o repair (reparador de instalação) do próprio instalador do SQL Server, afim de tentar recuperar o banco de dados master. “Tentativa que não deu certo”.
- Tentar usar o banco de dados master que é disponibilizado como template da instalação. Dica do nosso amigo #GustavoLarocca, consultor na power tuning. Em alguns cenários, esses templates podem salvar sua vida. No SQL Server 2019, ele se encontra nessa pasta. Em versões anteriores, o destino dessa pasta muda.
- Reinstalar o SQL Server do zero, e Attach os .MDFs e LDFs. Proposta de solução que daria certo, entretanto, bastante demorada.
- Por último, tentar realizar um tipo de manobra para tentar recuperar o banco de dados master sem ter que exercer o passo 3.
Por fim, consegui resolver com o passo 4, entretanto, existe alguns detalhes para este procedimento.
Observações:
- O procedimento a seguir apaga todos os dados originais registrados na base de dados master (linkedservers, usuários, etc).
- Não depende de CU (cumulative update) para reconstrução.
Laboratório
Neste laboratório, propositalmente corrompi o database master para tentar simular o problema. Não consegui simular com o mesmo erro, porém o cenário é bem parecido, ou seja, não consigo iniciar os meus serviços do SQL Server por motivos que envolve o banco de dados interno master, e não tenho backup. Apenas lembrando que a versão no qual ocorreu este cenário, foi o SQL Server 2019.
Como pré-requisito, você irá precisar da mídia de instalação da sua versão montada no sistema operacional. No meu caso, SQL Server 2019 Developer.
Com o SQL Server parado, vamos executar os seguintes passos:
- Monte a mídia de instalação na versão do SQL Server que já está instalado.
- Após montado, navegue pelo cmd em modo administrador até a unidade montada.
Chegando ao diretório da imagem, execute o seguinte comando abaixo:
Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS=DESKTOP-L0NAOVQ\felip /SAPWD=123 /SQLCOLLATION=SQL_Latin1_General_CP1_CI_AI
Parâmetros:
ACTION: Ação a ser executada.
INSTANCENAME: Nome da instancia que já existia.
SQLSYSADMINACOUNT: Importante observar que se o computador estiver em um domínio, mesmo que local, o usuário novo necessita ser dentro deste domínio.
SAPWD: Nova senha para o usuário definido.
SQLCOLLATION: COLLATION padrão do SQL Server.
3. Após o comando ter sido executado, inicie o serviço do SQL Server normalmente.
4. Logue no SQL Server:
5. Desvantagens do processo:
- A. O banco de dados master é recuperado, entretanto, é necessário attachar os MDF’s e LDF’s.
- Os usuários necessitam ser reconfigurados após o procedimento.
6. Vantagens do processo:
- Não é necessário reinstalar o SQL Server.
- O trabalho de recuperação do ambiente é mais rápido.
Na parte 2 do artigo, irei mostrar o processo de restaurar a base de dados master e alguns assuntos correlacionados sobre a importância das sysmtemdatabases.
Referências:
Deixe seu comentário. Até a próxima.
Top!!! Obrigado por compartilhar.
Obrigado. A disposição!
Post excelente!!! Certamente vai ajudar muitos desesperados quando o SQL Server estiver com esse problema hehehe. Mandou bem man!!! =)
Obrigado pelo comentário, fico muito feliz!