Partilhar via


Reconstruir 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 no banco de dados do sistema mestre, modelo, msdb, ou recurso, ou para modificar a intercalação padrão ao nível do servidor. Este artigo fornece instruções passo a passo para reconstruir bancos de dados do sistema no SQL Server.

Este artigo não está relacionado com reconstrução de índices.

Limitações

Quando os bancos de dados do sistema master, model, msdbe tempdb são reconstruídos, os bancos de dados são descartados e recriados em seu local original. Se um novo agrupamento for especificado na instrução rebuild, os bancos de dados do sistema serão criados usando essa configuração de agrupamento. 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 msdbou alterações nas configurações padrão do banco de dados no banco de dados model.

Pré-requisitos

Execute as seguintes tarefas antes de reconstruir os bancos de dados do sistema para garantir que você possa restaurar os bancos de dados do sistema para suas configurações atuais.

  1. Registre todos os valores de configuração em todo o servidor.

    SELECT * FROM sys.configurations;
    
  2. Registre todos os hotfixes aplicados à instância do SQL Server e ao agrupamento atual. Você deve reaplicar esses hotfixes depois de reconstruir 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;
    
  3. Registre o local atual de todos os dados e arquivos de log para os bancos de dados do sistema. A reconstrução dos bancos de dados do sistema instala todos os bancos de dados do sistema em seu local original. Se você tiver movido os dados do banco de dados do sistema ou os arquivos de log para um local diferente, deverá mover 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'));
    
  4. Localize o backup atual dos bancos de dados master, modele msdb.

  5. Se a instância do SQL Server estiver configurada como um distribuidor de replicação, localize o backup atual do banco de dados distribution.

  6. Verifique se você tem as permissões apropriadas para reconstruir os bancos de dados do sistema. Para executar esta operação, deve ser membro da função fixa de servidor sysadmin. Para obter mais informações, consulte Server-Level Funções.

  7. Verifique se as cópias dos master, model, msdb dados e arquivos de modelo de log 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 reconstrução e devem estar presentes para que a instalação seja bem-sucedida. Se eles estiverem faltando, execute o recurso Reparar da Instalação ou copie manualmente os arquivos 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.

Reconstruir bancos de dados do sistema

O procedimento a seguir recria os bancos de dados do sistema master, model, msdbe tempdb. Não é possível especificar os bancos de dados do sistema a serem reconstruídos. 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 ser colocado offline antes de executar o procedimento.

Este procedimento não recria o banco de dados resource. Consulte a seção Reconstruir o banco de dados do sistema de recursos mais adiante neste artigo.

Reconstruir bancos de dados do sistema para uma instância do SQL Server

  1. Insira a mídia de instalação 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.

  2. Em uma janela de prompt de comando, digite o seguinte comando. Os colchetes são usados para indicar parâmetros opcionais. Não insira nos parênteses. Ao usar um sistema operacional Windows que tenha o Controle de Conta de Usuário (UAC) habilitado, a execução da Instalação requer privilégios elevados. Deve executar a linha de comandos 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 Instalação deve ser executada sem qualquer interface de usuário.
    /ACTION=REBUILDDATABASE Especifica que a Instalação deve recriar 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 do Windows ou contas individuais a serem adicionados ao sysadmin função de servidor fixa. Ao especificar mais de uma conta, separe as contas com um espaço em branco. Por exemplo, digite BUILTIN\Administrators MyDomain\MyUser. Quando estiver especificando uma conta que contenha um espaço em branco dentro do nome da conta, coloque a conta entre aspas duplas. Por exemplo, digite NT AUTHORITY\SYSTEM.
    [ /SAPWD=StrongPassword ] Especifica a senha para a conta do SQL Server sa. Esse parâmetro será necessário se a instância usar o modo de Autenticação Mista (Autenticação do SQL Server e do Windows).

    Nota de segurança: A conta sa é uma conta bem conhecida do SQL Server e geralmente é alvo de usuários mal-intencionados. É fundamental que você use uma senha forte para o sa login.

    Não especifique esse parâmetro para o modo de Autenticação do Windows.
    [ /SQLCOLLATION=CollationName ] Especifica um novo agrupamento no nível do servidor. Este parâmetro é opcional. Quando não especificado, o agrupamento atual do servidor é usado.

    Importante: Alterar o agrupamento no nível do servidor não altera o agrupamento de bancos de dados de usuários existentes. Todos os bancos de dados de usuários recém-criados usarão o novo agrupamento por padrão.

    Para obter mais informações, consulte Definir ou alterar o agrupamento do servidor.
    [ /SQLTEMPDBFILECOUNT=NúmeroDeFicheiros ] Especifica o número de arquivos de dados tempdb. Este valor pode ser aumentado 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=FileSizeInMB ] Especifica o tamanho inicial de cada arquivo de dados tempdb em MB. A configuração permite o tamanho de até 1024 MB.

    Valor padrão: 8
    [ /SQLTEMPDBFILEGROWTH=FileSizeInMB ] Especifica o incremento de crescimento dos ficheiros de dados tempdb em MB. Um valor 0 indica que o crescimento automático está desativado e nenhum espaço adicional é permitido. A configuração permite o tamanho de até 1024 MB.

    Valor padrão: 64
    [ /SQLTEMPDBLOGFILESIZE=TamanhoDoFicheiroEmMB ] Especifica o tamanho inicial do arquivo de log tempdb em MB. A configuração permite o tamanho de até 1024 MB.

    Valor padrão: 8.

    Intervalo permitido: Min = 8, max = 1024.
    [ /SQLTEMPDBLOGFILEGROWTH=TamanhoDoFicheiroEmMB ] Especifica o incremento de crescimento do arquivo de log tempdb em MB. Um valor 0 indica que o crescimento automático está desativado e nenhum espaço adicional é permitido. A configuração permite o tamanho de até 1024 MB.

    Valor padrão: 64

    Intervalo permitido: Min = 8, max = 1024.
    [ /SQLTEMPDBDIR=Diretórios ] Especifica os diretórios para os arquivos de dados 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 tempdb serão espalhados pelos diretórios de forma alternada.

    Valor padrão: Diretório de dados do sistema
    [ /SQLTEMPDBLOGDIR=Diretório ] Especifica o diretório para o arquivo de log tempdb.

    Valor padrão: Diretório de dados do sistema
  3. Quando a Instalação tiver concluído a reconstruçã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. Este arquivo está localizado em C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\Logs.

  4. O cenário RebuildDatabase exclui bancos de dados do sistema e os instala novamente em um estado limpo. Como a configuração de tempdb contagem de arquivos não persiste, o valor do número de arquivos tempdb não é conhecido durante a instalação. Portanto, o cenário ebuildDatabase não sabe a contagem de tempdb ficheiros a serem readicionados. Você pode fornecer o valor do número de arquivos tempdb novamente com o parâmetro SQLTEMPDBFILECOUNT. Se o parâmetro não for fornecido, RebuildDatabase adicionará um número padrão de arquivos tempdb, que é tantos arquivos tempdb quanto a contagem de CPU ou 8, o que for menor.

Tarefas pós-reconstrução

Depois de reconstruir o banco de dados, talvez seja necessário executar as seguintes tarefas adicionais:

  • Restaure os backups completos mais recentes dos bancos de dados master, modele msdb. Para obter mais informações, consulte Backup e restauração de bancos de dados do sistema (SQL Server).

    Importante

    Se você tiver alterado o agrupamento do servidor, não restaure os bancos de dados do sistema. Isso substituirá o novo agrupamento pela configuração de agrupamento anterior.

    Se um backup não estiver disponível ou se o backup restaurado não estiver atualizado, recrie as entradas ausentes. Por exemplo, recrie todas as entradas ausentes para seus bancos de dados de usuários, dispositivos de backup, logons do SQL Server, pontos finais e assim por diante. A melhor maneira de recriar entradas é executar os scripts originais que as criaram.

    Importante

    Recomendamos que você proteja seus 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, consulte Fazer backup e restaurar bancos de dados replicados.

  • Mova os bancos de dados do sistema para os locais registrados anteriormente. Para obter mais informações, consulte Mover Bancos de Dados do Sistema.

  • Verifique se os valores de configuração em todo o servidor correspondem aos valores registrados anteriormente.

Reconstruir o banco de dados de recursos

O procedimento a seguir recria o banco de dados do sistema resource. Quando reconstróis o banco de dados resource, todos os hot fixes são perdidos e, por isso, devem ser reaplicados.

Reconstruir o banco de dados do sistema de recursos

  1. Inicie o programa de instalação do SQL Server (setup.exe) a partir da mídia de distribuição.

  2. Na área de navegação esquerda, selecione Manutençãoe, em seguida, selecione Reparar.

  3. A regra de suporte à Instalação e as rotinas de arquivo são executadas para garantir que o sistema tenha os pré-requisitos instalados e que o computador passe pelas regras de validação da Instalação. Selecione OK ou Instalar para continuar.

  4. Na página Selecionar Instância, selecione a instância a ser reparada e, em seguida, selecione Avançar.

  5. As regras de reparo serão executadas para validar a operação. Para continuar, selecione Avançar.

  6. Na página Pronto para Reparar, selecione Reparar. A página Concluir indica que a operação foi concluída.

Criar um novo banco de dados msdb

Se o banco de dados msdb estiver danificado ou suspeito e você não tiver um backup do banco de dados msdb, poderá criar um novo msdb usando o script instmsdb.

Advertência

Reconstruir o banco de dados msdb usando o script instmsdb.sql eliminará todas as informações armazenadas em msdb como trabalhos, alerta, operadores, planos de manutenção, histórico de backup, configurações de gerenciamento baseado em políticas, Database Mail, Performance Data Warehouse e assim por diante.

  1. 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.

  2. 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, Reiniciar o Mecanismo de Banco de Dados, SQL Server Agent ou SQL Server Browser Service. Para obter informações sobre o sinalizador de rastreamento 3608, consulte TF3608.

  3. Em outra janela de 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"
    
  4. Usando o Windows Explorer, renomeie os arquivos de banco de dados msdb. Por padrão, eles estão na subpasta DATA para a instância do SQL Server.

  5. Usando o SQL Server Configuration Manager, pare e reinicie o serviço Mecanismo de Banco de Dados normalmente sem sinalizadores de rastreamento adicionais.

  6. Em uma janela de 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> pela instância do Mecanismo de Banco de Dados. Use o caminho do sistema de arquivos da instância do SQL Server. Além disso, substitua MSSQLXX.INSTANCE_NAME pelo diretório que corresponde à sua versão e instância.

  7. Usando o Bloco de Notas do Windows, abra o arquivo instmsdb.out e verifique se há erros na saída.

  8. Reaplique todas as CUs instaladas na instância, o que atualizará seu banco de dados msdb para o nível atual.

  9. Recrie o conteúdo do usuário armazenado no banco de dados msdb, como trabalhos, alertas e outros itens.

  10. Faça backup do banco de dados msdb.

Reconstruir o banco de dados tempdb

Se o banco de dados tempdb estiver danificado ou suspeito e o mecanismo de banco de dados falhar ao iniciar, você poderá reconstruir tempdb sem a necessidade de reconstruir todos os bancos de dados do sistema.

  1. Renomeie os arquivos tempdb.mdf e templog.ldf atuais, se não estiverem faltando.

  2. Inicie o SQL Server a partir de um 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, use MSSQL$<instance_name>. O sinalizador de rastreamento 4022 desabilita a execução de procedimentos armazenados de inicialização. O -mSQLCMD permite que apenas sqlcmd.exe se conectem ao servidor. Para obter mais informações, consulte Outras Opções de Inicialização.

    Observação

    Verifique se a janela do prompt de comando permanece aberta após o SQL Server ser iniciado. Fechar a janela do prompt de comando encerrará o processo.

  3. Conecte-se ao servidor usando sqlcmd e, em seguida, use o procedimento armazenado a seguir para redefinir o status do banco de dados tempdb.

    exec master..sp_resetstatus tempdb
    
  4. Desligue o servidor pressionando Ctrl+C na janela do prompt de comando.

  5. Reinicie o serviço SQL Server. Isso cria um novo conjunto de arquivos de banco de dados tempdb e recupera o banco de dados tempdb.

Solucionar erros de reconstrução

A sintaxe e outros erros em tempo de execução são exibidos na janela do prompt de comando. Examine a instrução Setup para os seguintes erros de sintaxe:

  • Marca de barra ausente (/) na frente do nome de cada parâmetro.

  • Falta sinal de igual (=) 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 estão especificados na sintaxe.

Depois que a operação de reconstrução for concluída, examine os logs do SQL Server em busca de erros. O local de log padrão é C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\Logs. Para localizar o arquivo de log que contém os resultados do processo de reconstrução, altere os diretórios para a pasta Logs a partir de um prompt de comando e execute findstr /s RebuildDatabase summary*.*. Essa pesquisa apontará para todos os arquivos de log que contêm os resultados da reconstrução de bancos de dados do sistema. Abra os arquivos de log e examine-os em busca de mensagens de erro relevantes.