Fala pessoal,
Neste artigo vou demonstrar como reconstruir a base de dados interna master (fazer um rebuild no database) do SQL Server sem que se tenha um backup.
Cenário do problema
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, mas a primeira solução seria 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 às propostas de soluções para o rebuild do database Master no SQL Server
1. 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”.
2. 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 abaixo. Em versões anteriores, o destino dessa pasta muda.
3. Reinstalar o SQL Server do zero, e Attach os .MDFs e LDFs. Proposta de solução que daria certo, entretanto, bastante demorada.
4. 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 importantes!
- 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:
1. Monte a mídia de instalação na versão do SQL Server que já está instalado.
2. Após montado, navegue pelo cmd em modo administrador até a unidade montada.
Chegando ao diretório da imagem acima, 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:
Desvantagens deste processo de rebuild
- 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.
Vantagens deste processo de rebuild
- 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.
Caso tenha dúvidas sobre este processo de rebuild da base de dados Master no SQL Server, deixe seu comentário abaixo.