Recompilar bancos de dados do sistema
Aplica-se a: SQL Server
Os bancos de dados do sistema devem ser reconstruídos para corrigir problemas de corrupção nos bancos de dados do sistema mestre, modelo, msdb ou de recursos, ou para modificar o agrupamento padrão no nível do servidor. Este tópico fornece instruções passo a passo para recriar bancos de dados do sistema no SQL Server.
Este artigo não está relacionado à recompilação de índices.
Limitações
Quando os bancos de dados do sistema master
, model
, msdb
e tempdb
são recriados, os bancos de dados são eliminados e recriados em seu local original. Se uma ordenação nova for especificada na instrução REBUILD, os bancos de dados do sistema serão criados usando essa configuração de ordenação. Todas as modificações do usuário nesses bancos de dados são perdidas. Por exemplo, você pode ter objetos definidos pelo usuário no banco de dados master
, trabalhos agendados no msdb
ou alterações nas configurações padrão do banco de dados model
.
Pré-requisitos
Execute as tarefas a seguir antes de recriar os bancos de dados do sistema para garantir que os bancos de dados possam ser restaurados para suas configurações atuais.
Registre todos os valores de configuração em todo o servidor.
SELECT * FROM sys.configurations;
Registre todos os hotfixes aplicados à instância do SQL Server e à ordenação atual. Você deve reaplicar esses hotfixes depois de recriar os bancos de dados do sistema.
SELECT SERVERPROPERTY('ProductVersion ') AS ProductVersion, SERVERPROPERTY('ProductLevel') AS ProductLevel, SERVERPROPERTY('ResourceVersion') AS ResourceVersion, SERVERPROPERTY('ResourceLastUpdateDateTime') AS ResourceLastUpdateDateTime, SERVERPROPERTY('Collation') AS Collation;
Registre o local atual de todos os arquivos de log e de dados nos bancos de dados do sistema. A recriação do bancos de dados do sistema instala todos os bancos de dados do sistema em seu local original. Se você tiver movido os arquivos de log ou de dados do banco de dados do sistema para um local diferente, mova os arquivos novamente.
SELECT name, physical_name AS current_file_location FROM sys.master_files WHERE database_id IN (DB_ID('master'), DB_ID('model'), DB_ID('msdb'), DB_ID('tempdb'));
Localize o backup atual dos bancos de dados
master
,model
emsdb
.Se a instância do SQL Server estiver configurada como um Distribuidor de replicação, localize o backup atual do banco de dados
distribution
.Verifique se você possui as permissões adequadas para recriar os bancos de dados do sistema. Para executar essa operação, você deve ser membro da função de servidor fixa sysadmin . Para obter mais informações, veja Funções de nível de servidor.
Verifique se as cópias dos arquivos de modelo de dados e log
master
,model
emsdb
existem no servidor local. O local padrão para os arquivos de modelo éC:\Program Files\Microsoft SQL Server\MSSQL<xx>.MSSQLSERVER\MSSQL\Binn\Templates
(onde<xx>
é a versão que você instalou). Esses arquivos são usados durante o processo de recriação e devem estar presentes para que a Instalação tenha êxito. Se eles estiverem ausentes, execute o recurso de Instalação Reparar ou copie os arquivos manualmente da mídia de instalação. Para localizar os arquivos na mídia de instalação, navegue até o diretório de plataforma apropriado (x86 ou x64) e navegue atésetup\sql_engine_core_inst_msi\Pfiles\SqlServr\MSSQL.X\MSSQL\Binn\Templates
.
Recompilar bancos de dados do sistema
O procedimento a seguir recria o banco de dados do sistema master
, model
, msdb
e tempdb
. Você não pode especificar os bancos de dados do sistema que devem ser recriados. Para instâncias clusterizadas, esse procedimento deve ser executado no nó ativo, e o recurso do SQL Server no grupo de aplicativos de cluster correspondente deve estar offline antes da execução do procedimento.
Esse procedimento não recria o banco de dados de resource
. Consulte a seção Recriar o banco de dados do sistema Recursos mais adiante nesse artigo.
Recriar os bancos de dados do sistema para uma instância do SQL Server
Insira a mídia do instalador do SQL Server na unidade de disco ou, em um prompt de comando, altere os diretórios para o local do arquivo
setup.exe
no servidor local. Para o SQL Server 2022 (16.x), o local padrão no servidor éC:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\SQLServer2022
.Em uma janela de prompt de comando, digite o comando a seguir. São usados colchetes para indicar parâmetros opcionais. Não insira os colchetes. Ao usar um sistema operacional Windows com UAC (Controle de Conta de Usuário) habilitado, a execução da Instalação exige privilégios elevados. O prompt de comando deve ser executado como Administrador.
setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName /SQLSYSADMINACCOUNTS=accounts [ /SAPWD= StrongPassword ] [ /SQLCOLLATION=CollationName ]
Nome do Parâmetro Descrição /QUIET ou /Q Especifica que a configuração é executada sem nenhuma interface do usuário. /ACTION=REBUILDDATABASE Especifica que a configuração recria os bancos de dados do sistema. /INSTANCENAME=InstanceName O nome da instância do SQL Server. Para a instância padrão, digite MSSQLSERVER. /SQLSYSADMINACCOUNTS =contas Especifica os grupos ou contas individuais do Windows a serem adicionados à função de servidor fixa sysadmin . Ao especificar mais de uma conta, separe as contas com um espaço em branco. Por exemplo, digite BUILTIN\Administrators MyDomain\MyUser. Quando você estiver especificando uma conta que contém um espaço em branco dentro do nome de conta, coloque a conta entre aspas duplas. Por exemplo, digite NT AUTHORITY\SYSTEM. [ /SAPWD=StrongPassword ] Especifica a senha da conta sa do SQL Server. Esse parâmetro será exigido se a instância usar o modo de Autenticação Mista (SQL Server e Autenticação do Windows).
Observação de Segurança: a conta sa é uma conta conhecida do SQL Server e, geralmente, é visada por usuários mal-intencionados. É importante que você use uma senha forte para o logon sa.
Não especifique esse parâmetro para o modo de Autenticação do Windows.[ /SQLCOLLATION=CollationName ] Especifica uma nova ordenação no nível do servidor. Esse parâmetro é opcional. Quando não está especificado, a ordenação atual do servidor é usada.
Importante: a alteração da ordenação no nível do servidor não altera a ordenação de bancos de dados de usuário existentes. Por padrão, todos os bancos de dados do usuário criados recentemente usarão a nova ordenação.
Para obter mais informações, consulte Definir ou alterar a ordenação do servidor.[ /SQLTEMPDBFILECOUNT=NúmeroDeArquivos ] Especifica o número de arquivos de dados tempdb
. Esse valor pode ser aumentado para até 8 ou o número de núcleos, o que for maior.
Valor padrão: 8 ou o número de núcleos, o que for menor.[ /SQLTEMPDBFILESIZE=TamanhoDoArquivoEmMB ] Especifica o tamanho inicial de cada arquivo de dados tempdb
em MB. A instalação permite o tamanho de até 1.024 MB.
Valor padrão: 8[ /SQLTEMPDBFILEGROWTH=TamanhoDoArquivoEmMB ] Especifica o incremento de aumento do arquivo de cada arquivo de dados do tempdb
em MB. Um valor 0 indica que o crescimento automático está desativado e nenhum espaço adicional é permitido. A instalação permite o tamanho de até 1.024 MB.
Valor padrão: 64[ /SQLTEMPDBLOGFILESIZE=TamanhoDoArquivoEmMB ] Especifica o tamanho inicial do arquivo de log do tempdb
em MB. A instalação permite o tamanho de até 1.024 MB.
Valor padrão: 8.
Intervalo permitido: Mín. = 8, Máx. = 1024.[ /SQLTEMPDBLOGFILEGROWTH=TamanhoDoArquivoEmMB ] Especifica o incremento de aumento do arquivo de log do tempdb
em MB. Um valor 0 indica que o crescimento automático está desativado e nenhum espaço adicional é permitido. A instalação permite o tamanho de até 1.024 MB.
Valor padrão: 64
Intervalo permitido: Mín. = 8, Máx. = 1024.[ /SQLTEMPDBDIR=Diretórios ] Especifica o diretório dos arquivos de dados do tempdb
. Ao especificar mais de um diretório, separe os diretórios com um espaço em branco. Se vários diretórios forem especificados, os arquivos de dados dotempdb
serão distribuídos pelos diretórios com o método round robin.
Valor padrão: diretório de dados do sistema[/SQLTEMPDBLOGDIR = Diretório] Especifica o diretório do arquivo de log do tempdb
.
Valor padrão: diretório de dados do sistemaQuando a Instalação tiver concluído a recriação dos bancos de dados do sistema, ela retornará ao prompt de comando sem mensagens. Examine o arquivo de log Summary.txt para verificar se o processo foi concluído com êxito. Esse arquivo está localizado em
C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\Logs
.O cenário de RebuildDatabase exclui os bancos de dados do sistema e instala-os novamente em estado limpo. Como a configuração de contagem de arquivos
tempdb
não persiste, o valor do número de arquivostempdb
não é conhecido durante a instalação. Portanto, o cenário ebuildDatabase não sabe a contagem de arquivostempdb
a ser adicionada novamente. Você pode fornecer o valor do número de arquivostempdb
novamente com o parâmetro SQLTEMPDBFILECOUNT. Se o parâmetro não for fornecido, RebuildDatabase adicionará um número padrão de arquivostempdb
, que é tantos arquivostempdb
quanto a contagem de CPU ou 8, o que for menor.
Tarefas pós-recriação
Depois de recriar o banco de dados, talvez seja necessário executar as tarefas adicionais a seguir:
Restaure os backups completos mais recentes dos bancos de dados
master
,model
emsdb
. Para obter mais informações, confira Backup e restauração de bancos de dados do sistema (SQL Server).Importante
Se você alterou a ordenação do servidor, não restaure os bancos de dados do sistema. Fazer isso substituirá a nova ordenação pela configuração da ordenação anterior.
Se um backup não estiver disponível ou se o backup restaurado não for atual, recrie todas as entradas ausentes. Por exemplo, recrie todas as entradas ausentes de seus bancos de dados de usuários, dispositivos de backup, logons do SQL Server, pontos de extremidade etc. A melhor maneira de recriar entradas é executar os scripts originais que as criaram.
Importante
É recomendável proteger os scripts para evitar que eles sejam alterados por indivíduos não autorizados.
Se a instância do SQL Server estiver configurada como um Distribuidor de replicação, você deverá restaurar o banco de dados
distribution
. Para obter mais informações, veja Fazer backup e restaurar bancos de dados replicados.Mova os bancos de dados do sistema para os locais que você registrou anteriormente. Para obter mais informações, veja Mover bancos de dados do sistema.
Verifique se os valores da configuração de todo o servidor correspondem aos valores registrados anteriormente.
Recompilar o banco de dados de recursos
O procedimento a seguir recria o banco de dados do sistema resource
. Quando você recompila o banco de dados resource
, todos os hot fixes são perdidos e, portanto, devem ser reaplicados.
Recompilar o banco de dados do sistema de recursos
Inicie o programa de Instalação do SQL Server (
setup.exe
) da mídia de distribuição.Na área de navegação à esquerda, clique em Manutençãoe em Reparar.
A regra de suporte à Instalação e as rotinas de arquivos são executadas para garantir que o sistema tenha os pré-requisitos instalados e que o computador aprove as regras de validação da Instalação. Selecione OK ou Instalar para continuar.
Na página Selecionar Instância, selecione a instância a ser reparada e, em seguida, selecione Avançar.
As regras de reparo são executadas para validar a operação. Para continuar, selecione Avançar.
Na página Pronto para Reparar, selecione Reparar. A página Concluído indica que a operação foi concluída.
Criar um banco de dados msdb
Se o banco de dados msdb
estiver danificado ou com suspeita de danos e você não tiver um backup do banco de dados msdb
, poderá criar um novo msdb
usando o script instmsdb
.
Aviso
A recriação do banco de dados msdb
com o script instmsdb.sql
eliminará todas as informações armazenadas em msdb
, tais como trabalhos, alerta, operadores, planos de manutenção, histórico de backup, configurações de Gerenciamento Baseado em Políticas, Database Mail, Data Warehouse de desempenho etc.
Pare todos os serviços que se conectam ao Mecanismo de Banco de Dados, incluindo SQL Server Agent, SSRS, SSIS e todos os aplicativos que usam o SQL Server como armazenamento de dados.
Inicie o SQL Server a partir da linha de comando usando o comando:
NET START MSSQLSERVER /T3608
Para obter mais informações, consulte Iniciar, parar, pausar, retomar e reiniciar os serviços SQL Server. Para obter informações sobre o sinalizador de rastreamento (Trace flag) 3608, veja TF3608.
Em outra janela da linha de comando, desanexe o banco de dados
msdb
executando o seguinte comando, substituindo<servername>
pela instância do SQL Server:SQLCMD -E -S<servername> -dmaster -Q"EXEC sp_detach_db msdb"
Usando o Windows Explorer, renomeie os arquivos de banco de dados
msdb
. Por padrão, eles estão na subpasta DATA da instância do SQL Server.Usando o SQL Server Configuration Manager, pare e reinicie o serviço Mecanismo de Banco de Dados normalmente sem sinalizadores de rastreamento adicionais.
Em uma janela do prompt de comando, conecte-se ao SQL Server e execute o comando:
SQLCMD -E -S<servername> -i"C:\Program Files\Microsoft SQL Server\MSSQLXX.INSTANCE_NAME\MSSQL\Install\instmsdb.sql" -o"C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Install\instmsdb.out"
Substitua
<servername>
com a instância do Mecanismo de Banco de Dados. Use o caminho do sistema de arquivo da instância do SQL Server. Além disso, substituaMSSQLXX.INSTANCE_NAME
pelo diretório que corresponde à sua versão e instância.Usando o Bloco de Notas do Windows, abra o arquivo
instmsdb.out
e verifique se há erros na saída.Reaplique todas as CUs instaladas na instância, o que atualizará seu banco de dados
msdb
para o nível de atual de CU.Recrie o conteúdo de usuário armazenado no banco de dados
msdb
, como, por exemplo, trabalhos, alerta e outros itens.Faça backup do banco de dados do
msdb
.
Recompilar o banco de dados tempdb
Se o banco de dados tempdb
estiver danificado ou com suspeita de danos e o mecanismo de banco de dados falhar ao iniciar, você poderá recompilar tempdb
sem a necessidade de recompilar todos os bancos de dados do sistema.
Renomeie os arquivos
tempdb.mdf
etemplog.ldf
atuais, se não estiverem ausentes.Inicie o SQL Server no prompt de comando usando o aplicativo sqlservr.
sqlservr -c -f -T3608 -T4022 -s <instance> -mSQLCMD
Para um nome de instância padrão, use
MSSQLSERVER
, para instância nomeada, useMSSQL$<instance_name>
. O sinalizador de rastreamento 4022 desabilita a execução dos procedimentos armazenados de inicialização. O-mSQLCMD
permite que apenas sqlcmd.exe se conecte ao servidor. Para obter mais informações, veja Outras opções de inicialização.Observação
Verifique se a janela do prompt de comando permanece aberta depois que o SQL Server é iniciado. Fechar a janela do prompt de comando encerrará o processo.
Conecte-se ao servidor usando sqlcmd e use o procedimento armazenado a seguir para redefinir o status do banco de dados
tempdb
.exec master..sp_resetstatus tempdb
Desligue o servidor pressionando
Ctrl
+C
na janela do prompt de comando.Reinicie o serviço SQL Server. Isso cria um novo conjunto de arquivos de banco de dados
tempdb
e recupera o banco de dadostempdb
.
Solução de problemas de erros de recompilação
Erros de sintaxe e outros erros em tempo de execução são exibidos na janela do prompt de comando. Examine os erros de sintaxe a seguir na instrução da Instalação:
Marca de barra (
/
) ausente na frente de cada nome de parâmetro.Sinal de igualdade (
=
) ausente entre o nome do parâmetro e o valor do parâmetro.Presença de espaços em branco entre o nome do parâmetro e o sinal de igual.
Presença de vírgulas (
,
) ou outros caracteres que não são especificados na sintaxe.
Depois que a operação de recompilação é concluída, examine se há erros nos logs do SQL Server. A localização padrão de log é C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\Logs
. Para localizar o arquivo de log que contém os resultados do processo de recriação, altere os diretórios para a pasta Logs em um prompt de comando e execute findstr /s RebuildDatabase summary*.*
. Essa pesquisa apontará para qualquer arquivo de log que contenha os resultados da recriação dos bancos de dados do sistema. Abra os arquivos de log e examine-os para verificar se há mensagens de erro relevantes.