Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Bancos de dados do sistema SQL Server – Restaurar bancos de dados do sistema


Nos artigos anteriores da série SQL Server System Databases, aprendemos a finalidade de todos os bancos de dados do SQL Server System que fazem parte da instalação do SQL Server e entendemos as práticas recomendadas a serem implementadas para eles. Também entendemos os bancos de dados Tempdb e MSDB com mais detalhes. Como o backup e a restauração do banco de dados do sistema são um pouco diferentes em comparação com os bancos de dados do usuário, veremos como fazer backup dos bancos de dados do sistema e restaurar o banco de dados do sistema a partir de backups em detalhes neste artigo.

Backup do banco de dados SQL


O termo Backup refere-se a copiar os dados dentro de um banco de dados como um arquivo de backup que pode ser usado para restaurar ou recuperar os dados posteriormente.

Um Backup Completo de um banco de dados conterá as cópias de dados em arquivos de dados e arquivos de log para restaurar como um banco de dados ou fazer a restauração pontual em caso de desastres ou falhas catastróficas. Portanto, backups completos regulares no sistema, bem como bancos de dados de usuários, são cruciais.

Além do Backup Completo, o SQL Server oferece suporte a várias outras opções de Backup, como Backup Diferencial, Backup de Log Transacional, Backup de Arquivos, etc., mas não vamos nos concentrar neles, pois está fora do escopo deste artigo.

Um backup completo do banco de dados deve ser programado para ser executado periodicamente ou após qualquer alteração de configuração específica. Embora o SQL Server possa aceitar o backup completo do banco de dados em diferentes extensões de arquivo, é recomendável salvar esse backup como um arquivo *.bak para facilitar a classificação e a manutenção.

A sintaxe do banco de dados Backup tem muitas opções disponíveis, mas vamos nos concentrar apenas nos comandos fundamentais necessários para fazer o Backup Completo de qualquer banco de dados. A sintaxe completa está presente no artigo do MSDN.

Sintaxe do BANCO DE DADOS DE BACKUP (mínimo)
BACKUP DATABASE <Database_name> 
TO DISK = <File_Path>
GO

Bancos de dados de usuários de backup


Para fazer um backup completo do AdventureWorks banco de dados, basta substituir o Nome do banco de dados e Caminho do arquivo no comando BACKUP DATABASE acima e execute-o:
BACKUP DATABASE [AdventureWorks] 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\AdventureWorks_Full.bak'
GO

Bancos de dados do sistema de backup


Usando o comando BACKUP DATABASE acima, podemos fazer um Backup Completo dos bancos de dados do sistema, como master, msdb e model:
BACKUP DATABASE master 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\master_Full.bak'
GO
BACKUP DATABASE model 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\model_Full.bak'
GO
BACKUP DATABASE msdb 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\msdb_Full.bak'
GO

Podemos navegar para o caminho da pasta acima e lá vemos os Backups Completos do Banco de Dados criados com sucesso para o banco de dados do usuário e os bancos de dados do sistema:

É possível fazer backup do banco de dados tempdb?


Vamos tentar fazer um backup completo do banco de dados do sistema tempdb usando a mesma sintaxe BACKUP DATABASE:
BACKUP DATABASE tempdb 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\tempdb_Full.bak'
GO

Conforme discutimos em artigos anteriores, tempdb é o único banco de dados para o qual um Backup não pode ser usado . O banco de dados tempdb será criado sempre que os serviços do SQL Server forem iniciados. Portanto, se houver algum problema com o tempdb, reiniciar o serviço SQL Server ajudará a resolvê-lo.

Restaurar banco de dados


A restauração de um banco de dados do Full Backup(*.bak) traz de volta o banco de dados com dados completos ou “reverte” um banco de dados para um ponto no tempo. O comando RESTORE também pode ser usado para restaurar arquivos, grupos de arquivos ou logs transacionais, mas não é o escopo do artigo atual.

Para restaurar um backup completo do banco de dados , podemos usar a sintaxe abaixo. Nota:Semelhante ao comando BACKUP, o comando RESTORE tem muitas opções, mas vamos recorrer apenas às básicas. Você pode encontrar informações detalhadas sobre essas opções em um artigo dedicado do MSDN.

Sintaxe de RESTAURAR BANCO DE DADOS
RESTORE DATABASE <Database_Name> 
FROM  DISK = <File Path>
WITH  REPLACE
GO

Restaurar banco de dados do usuário


Para restaurar o AdventureWorks banco de dados do Backup Completo que fizemos anteriormente, podemos usar o comando RESTORE DATABASE, substituindo o Nome do banco de dados e Caminho do arquivo como mostrado abaixo:
RESTORE DATABASE [AdventureWorks] 
FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\AdventureWorks_Full.bak' 
WITH REPLACE
GO

Restaurar banco de dados do modelo


Vamos tentar restaurar o banco de dados do sistema modelo usando o comando RESTORE DATABASE:
RESTORE DATABASE model 
FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\model_Full.bak' 
WITH REPLACE
GO

O backup do banco de dados modelo pode ser restaurado com êxito usando o comando RESTORE DATABASE padrão.

Restaurar banco de dados mestre


Agora, vamos tentar restaurar o banco de dados mestre do sistema usando o comando RESTORE DATABASE:
RESTORE DATABASE master 
FROM  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\master_Full.bak' 
WITH  REPLACE
GO

Ele gerou um erro informando que a instância do SQL Server deveria estar sendo executada no modo de usuário único para restaurar o banco de dados mestre. Como a mensagem de erro indica, precisamos iniciar nossa instância do SQL Server no modo de usuário único e tentar restaurar o banco de dados mestre.

Para iniciar uma instância do SQL Server no modo de usuário único, podemos aplicar um dos seguintes métodos:
  • Prompt de comando
  • Parâmetros de inicialização do SQL Server no SQL Server Configuration Manager.

Abordagem do prompt de comando


Para iniciar a instância do SQL Server em modo de usuário único por meio do prompt de comando, abra o prompt de comando com Executar como administrador opção como mostrado abaixo:

Feito isso, digite o comando:
NET STOP <SQL_Server_Service_Name>

O SQL_Server_Service_Name pode ser obtido através do SQL Server Configuration Manager ou services.msc

Gerenciador de configuração do SQL Server

Serviços.msc

Como nosso SQL Server Service é a instância padrão, podemos usar o nome MSSQLSERVER como destacado acima. Uma vez inserido, ele solicitará a confirmação para interromper todos os serviços dependentes. Também podemos interromper o serviço SQL Server Agent digitando Y para Sim .

Quando o SQL Server Service é interrompido, podemos iniciá-lo no modo de usuário único. Execute o comando abaixo onde /m significa iniciar o SQL Server Service no modo de usuário único.
NET START MSSQLSERVER /m

Quando for realizado, podemos tentar restaurar o banco de dados mestre. Execute o comando RESTORE BACKUP como antes:

Ao iniciar a instância do SQL Server no modo de usuário único, podemos restaurar o banco de dados mestre do sistema com êxito a partir do último backup completo de banco de dados conhecido sem problemas. Assim, aprendemos que para restaurar o banco de dados mestre, a instância do SQL Server deve estar no modo de usuário único.

Com a instância do SQL Server no modo de usuário único, apenas um usuário pode se conectar e depois que nossas atividades de restauração forem concluídas, precisamos alterá-lo novamente para o modo multiusuário, interrompendo a instância do SQL Server e iniciando a instância do SQL Server sem a opção /m, conforme mostrado abaixo de:
NET STOP MSSQLSERVER
NET START MSSQLSERVER

Uma vez iniciado no modo normal ou modo multiusuário, todos os usuários podem se conectar à instância do SQL Server e realizar suas atividades. Também podemos verificar se o banco de dados mestre foi restaurado para o momento em que o Backup Completo foi realizado e quaisquer alterações de configuração feitas depois disso precisam ser executadas novamente.

Algumas coisas a serem observadas enquanto a instância do SQL Server está no modo de usuário único:
  • Quando a instância do SQL Server está no modo de usuário único, apenas uma sessão de usuário pode se conectar a ela. Portanto, certifique-se de que o SQL Server Agent Service e todos os outros serviços relacionados ao SQL Server estejam no stopped status. Caso contrário, essas conexões podem ser estabelecidas primeiro e, se isso acontecer, não poderemos nos conectar ao SQL Server para restaurar o banco de dados.
  • Ao se conectar via SSMS em modo de usuário único, desconecte o Pesquisador de Objetos e conecte-se apenas pela janela de consulta. Se uma conexão for estabelecida a partir do Pesquisador de Objetos, uma única conexão será estabelecida. Portanto, você não pode se conectar a partir da janela de consulta. Consulte a captura de tela abaixo – ela demonstra como conectar apenas a janela Nova Consulta sem conectar via Pesquisador de Objetos:

Parâmetro de inicialização do SQL Server no Configuration Manager


Aqueles que estão mais à vontade com a GUI em vez do prompt de comando podem aplicar a abordagem abaixo.

1). Abra o SQL Server Configuration Manager digitando MSSQLManager13.msc no prompt de comando. Aqui, 13 refere-se ao SQL Server 2016, portanto, use os números correspondentes corretos para outras versões do SQL Server:
  • SQL Server 2012SQLServerManager11.msc
  • SQL Server 2014SQLServerManager12.msc
  • SQL Server 2016SQLServerManager13.msc
  • SQL Server 2017SQLServerManager14.msc
  • SQL Server 2019SQLServerManager15.msc

2). Expanda Serviços do SQL Server :

3). Clique com o botão direito do mouse no SQL Server Service identificado como SQL Server (MSSQLSERVER) > Propriedades .

4). Selecione os Parâmetros de inicialização guia do menu.

5). Clique em -m em Especificar um parâmetro de inicialização campo e clique em Adicionar para iniciar o SQL Server Service em modo de usuário único.

6). Clique emOK e reinicie o SQL Server Service para iniciar o SQL Server Service no modo de usuário único.

Para modificar a instância do SQL Server do modo de usuário único para o modo multiusuário ou modo normal após restaurar o banco de dados mestre, basta clicar no parâmetro -m de Parâmetro existente s , Clique em Remover e reinicie o serviço SQL Server.

Restaurar banco de dados MSDB


Agora, vamos tentar restaurar o backup do banco de dados do sistema msdb usando o comando padrão RESTORE DATABASE:
RESTORE DATABASE msdb 
FROM  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\msdb_Full.bak' 
WITH  REPLACE
GO

Esta tentativa nos traz um erro informando que Não foi possível obter acesso exclusivo porque o banco de dados está em uso . Esta mensagem de erro indica que algum outro processo está usando msdb . Assim, precisamos aplicar uma das abordagens abaixo para restaurar o banco de dados msdb corretamente:
  • Inicie a instância ou serviço do SQL Server no modo de usuário único, como fizemos anteriormente para evitar que alguém se conecte e acesse o msdb banco de dados.
  • Ou traga o msdb banco de dados para o modo de usuário único sem que nenhum usuário se conecte a ele.

Como sabemos como transformar a Instância ou Serviço do SQL Server no modo de usuário único ao restaurar o banco de dados do sistema mestre, tentaremos a segunda opção alterando o banco de dados msdb para o modo de usuário único para restaurar o backup do banco de dados msdb.

Execute o comando abaixo:
USE [master]
GO
ALTER DATABASE [msdb] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

Importante :A execução do comando acima pode falhar nos seguintes casos:
  • O serviço SQL Server Agent está funcionando. Para corrigir a falha, interrompa o SQL Server Agent Service e tente novamente.
  • Todas as sessões de usuário são conectadas ao banco de dados msdb. Podemos descobrir conexões ativas com msdb ou outro banco de dados usando a consulta abaixo:
use master
GO
select spid
from sys.sysprocesses
where dbid = db_id('msdb')

Se esta consulta trouxer algum resultado, indica que algumas sessões de usuário estão conectadas ao banco de dados msdb. Nesse caso, devemos matar essas sessões pelo comando KILL e substituindo o spid obtido da execução da consulta acima:
KILL <spid>

Quando nenhuma sessão está conectada ao msdb banco de dados, poderemos trazer o banco de dados msdb com sucesso para o modo de usuário único. Sempre que um banco de dados estiver no modo de usuário único, poderemos ver a palavra (usuário único) mostrada nas proximidades do banco de dados, conforme destacado abaixo para o banco de dados msdb:

Vamos tentar restaurar o msdb banco de dados agora usando nosso comando RESTORE DATABASE:

Com o banco de dados msdb no modo de usuário único, conseguimos restaurar o msdb banco de dados com sucesso a partir do último backup completo bom conhecido de msdb base de dados. A restauração de um banco de dados do backup por padrão o levará ao modo multiusuário e, se ainda estiver no modo monousuário por qualquer motivo, podemos executar o comando abaixo para trazê-lo de volta ao modo multiusuário:
USE [master]
GO
ALTER DATABASE [msdb] SET MULTI_USER
GO

Reconstruir bancos de dados do sistema


Para qualquer Produção ideal ambientes, é fundamental ter um backup completo dos bancos de dados do sistema para restaurar os bancos de dados do sistema sem perda de dados em caso de erros acidentais dos usuários ou corrupção de banco de dados ou recuperação de desastres.

Na pior das hipóteses, se os serviços do SQL Server não puderem ser iniciados, precisaríamos primeiro tentar restaurar os bancos de dados do sistema dos últimos backups completos conhecidos e, se não tivermos backups completos disponíveis e não pudermos iniciar os serviços do SQL Server, estaremos resta apenas uma opção final, ou seja, Reconstruindo os bancos de dados do sistema. Observação :A reconstrução dos bancos de dados do sistema limpará todas as configurações de nível de servidor armazenadas em todos os bancos de dados do sistema e podemos perder todas as configurações de nível de servidor/instância, como logins, configurações do SQL Server Agent, outros detalhes críticos armazenados nos bancos de dados do sistema que vimos em nossos artigos anteriores.

Vamos dar uma olhada rápida em como reconstruir bancos de dados do sistema (como mencionado acima, esse processo deve ser feito como última medida para trazer de volta a instância do SQL Server na ausência de backups completos dos bancos de dados do sistema).

Para reconstruir os bancos de dados do sistema, precisaríamos da mídia de instalação do SQL Server, montada ou copiada para o servidor onde nossa instância do SQL Server está instalada. Feito isso, devemos seguir os passos abaixo:
  1. No prompt de comando, navegue até o caminho onde os arquivos de configuração do SQL Server (setup.exe) estão localizados:

    C:\Arquivos de Programas\Microsoft SQL Server\130\Setup Bootstrap\SQLServer2016
  2. Execute o comando abaixo, substituindo todos os parâmetros por valores válidos. Valor AÇÃO =REBUILDDATABASE denota que todos os bancos de dados do sistema devem ser reconstruídos após a execução desse comando.
Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName /SQLSYSADMINACCOUNTS=accounts [ /SAPWD= StrongPassword ] [ /SQLCOLLATION=CollationName]

Os parâmetros a serem alterados incluem:
  • Nome da instância – o nome da instância do SQL Server, no nosso caso é RRJ
  • Contas – o nome da conta sysadmin, no nosso caso é sa
  • StrongPassword – uma senha forte para o sa conta sysadmin.
  • CollationName – o nome do agrupamento do banco de dados SQL Server, se precisar ser alterado.

Conclusão


Aprendemos como fazer backup e restaurar bancos de dados do usuário e do sistema e entendemos as medidas adicionais necessárias para restaurar bancos de dados do sistema, como bancos de dados do sistema master e msdb. No caso de backups completos de bancos de dados do sistema ausentes, também aprendemos como reconstruir bancos de dados do sistema a partir da mídia de instalação do SQL Server e entendemos as perdas de dados relacionadas à configuração envolvidas durante a reconstrução dos bancos de dados do sistema. Para resumir, entendemos indiretamente a importância de agendar backups completos para bancos de dados do sistema, além dos bancos de dados do usuário.

Obrigado pelo seu tempo, e nos encontraremos novamente em breve com outro artigo interessante.