Restaurando databases de sistemas

Olá pessoal,

No post de hoje vou demonstrar como fazer o restore das bases de sistemas (master, msdb e model). Geralmente restauramos essas bases quando precisamos migrar o nosso servidor ou precisamos recuperar de algum desastre.

Para iniciar o processo precisamos parar os serviços do SQL Server e do SQL Server Agent no  SQL Server Configuration Manager.

Servico_Iniciado

SQL_Server_Configuration_Manager

Com os serviços parados precisamos agora iniciar o serviço com o modo “Single User”, para isso vamos ter que subir o serviço no Command Prompt.

Para iniciar devemos navegar até o diretório onde esta os arquivos binários do SQL Server, no meu caso está no diretório “C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Binn”, após isso iniciar o serviço com o comando “sqlservr.exe -c -m -s sql01”.

Iniciar_SQL_SINGLE_User

Para entender as opções de inicialização do SQL Server via Command você pode ver aqui.

Servico_Iniciado_SingleUser

Com o serviço iniciado agora vamos conectar na instância utilizando o SQLCMD. Para utilizar o SQLCMD também usaremos o Command Prompt, em uma nova janela.

Após abrir a nova janela basta digitar “SQLCMD – S Nome da Instância” que vai conectar.

Exec_SQLCMD_Prompt_Command

Connect_SQLCMD_Prompt_Command

Agora vamos fazer o restore da base master.

RESTORE DATABASE master
FROM DISK = 'C:\Temp\BKP_Master\master_Dados.bak'
WITH REPLACE
go

Restore_Master_Database

Após isso a sua base de dados master está restaurada, se as outras bases de sistemas estiverem nos mesmo diretórios do servidor original, você não precisa fazer mais nada, somente iniciar o serviço, mas se a estrutura for diferente ocorrerá um erro, no meu caso as estruturas eram diferentes e ao iniciar o serviço do SQL Server ocorreu o seguinte erro:

Erro_Ao_Iniciar_Instancia

Para ajustar os diretórios precisamos iniciar o serviço do SQL Server no prompt novamente, porém agora utilizaremos a Trace Flag 3608, para saber mais clique aqui.

“sqlservr.exe -c -s MSQLSERVER /T3608”

Iniciar_with_traceflag_3608

Agora precisamos alterar os diretórios das bases msdb, model e tempdb, para isso precisamos conectar no SQLCMD novamente e executar o script de alteração de diretório.

ALTER DATABASE tempdb
MODIFY FILE (NAME = 'tempdev', FILENAME = 'Diretorio_onde_desejar_criar_o_tempdb.mdf')
go
ALTER DATABASE tempdb
MODIFY FILE (NAME = 'templog', FILENAME = 'Diretorio_onde_desejar_criar_o_tempdb.ldf')
GO

ALTER DATABASE model
MODIFY FILE (NAME = 'modeldev', FILENAME = 'Diretorio_onde_esta_as_bases_de_sistema.mdf')
go
ALTER DATABASE model
MODIFY FILE (NAME = 'modellog', FILENAME = 'Diretorio_onde_esta_as_bases_de_sistema.ldf')
GO

ALTER DATABASE msdb
MODIFY FILE (NAME = 'msdbdata', FILENAME = 'Diretorio_onde_esta_as_bases_de_sistema.mdf')
go
ALTER DATABASE msdb
MODIFY FILE (NAME = 'msdblog', FILENAME = 'Diretorio_onde_esta_as_bases_de_sistema.ldf')
go

Alterar_Diretorios_SystemDatabases

Após isso já podemos iniciar o serviço pelo SQL Server Configuration Manager.

Servico_Iniciado

Ao conectar na instância pelo Management Studio, podemos fazer o restore das bases msdb e model, normalmente.

RESTORE DATABASE msdb
FROM DISK = 'C:\bak\msdb.bak'
WITH REPLACE
go

RESTORE DATABASE model
FROM DISK = 'C:\bak\model.bak'
WITH REPLACE
go

As bases de sistemas estarão com o status de “Recovery Pending” agora você tem que apenas fazer o restore das bases de usuários, a sua instância já esta com a mesma configuração do seu backup.

Bases_Inrecovery

Por hoje é isso espero ajudar.

Um abraço.

Tiago Neves

Deixe uma resposta