Movendo arquivos dos databases de sistema – SQL Server

Neste artigo irei mostrar um método para mover os arquivos de DATA e LOG dos databases system (master, msdb, tempdb e model).

Caso você queira saber como mover os arquivos de DATA e LOG dos databases users (databases criado por usuário, a grosso modo), veja este post: Movendo Arquivos dos Databases – SQL Server

Antes de mover os arquivos de DATA e LOG dos databases system no SQL Server, é preciso entender melhor a importância de cada um:

• master: este database armazena todas as configurações à nível de sistema. Qualquer coisa que é definida no nível de instância do SQL Server normalmente é armazenada neste mesmo database. Se o database master estiver danificado ou corrompido, a instância do SQL Server não será iniciado (é importante sempre ser feito um backup deste database!).
• msdb: este database contém informações do SQL Server Agent, assim como Jobs, Operadores e alertas. Este database também contém informações sobre backups e restores feitos, assim como o histórico dos planos de execuções de manutenções, etc. Até a versão do SQL Server 2008 R2 os pacotes do SQL Server Integration Services (SSIS) também eram armazenados neste database.
• model: este database possuí um template no qual todos os usuários dos databases são baseados. Qualquer novo database que é criado usa o model como modelo. Todos os objetos criados no database model estarão presentes em todos os databases que forem criados na instância. Pode parecer que este database não é muito importante, porém caso este database esteja danificado ou corrompido, a instância do SQL Server não será iniciado.
• tempdb: este database armazena os dados temporários da instância. Toda vez que o SQL Server for iniciado, este database é truncado, portanto não há necessidade de realizar um backup deste banco de dados, tanto que não há opção para ser executado um backup deste database.

Vamos começar pelo database master. Você verá que o procedimento para alterar o caminho dos arquivos do database master é diferente dos demais, por que? Quando você inicia o serviço da instância, ele executa um executável e passa os parâmetros dos arquivos de DATA e LOG da master, pois lá que as informações pertinentes à instância se encontram. Claro que a ordem de quais databases você irá mudar não influência, porém há de se tomar MUITO cuidado com os passos a serem feitos, pois um problema que ocorrer, não será possível voltar atrás, claro, dependendo do problema.

Para mudar o caminho dos arquivos de DATA e LOG do database master é necessário realizar os seguintes passos principais:
1. Alterar os parâmetros de inicialização do serviço do SQL Server;
2. Parar o serviço (instância);
3. Mover os arquivos de LOG (mastlog.ldf) e DATA (master.mdf);
4. Iniciar o serviço (instância).

Para começar, vamos verificar onde estão os arquivos de DATA e LOG do database master através da query:

Use master 
GO
EXEC sp_helpfile 

Anote o caminho que está na coluna filename, pois iremos copiar os arquivos que estão neste caminho para um outro caminho, no caso o caminho “C:\CaminhosSQLServer\LOG” para o arquivo de LOG, e o caminho: “C:\CaminhosSQLServer\DATA” para o arquivo de DATA.

master_01

Logo em seguida abra o SQL Server Configuration Manager através do comando mmc.exe

master_02

No nó SQL Server Services, dê um duplo clique na instância do SQL Server, logo em seguida clique em Propriedades, e depois vá na aba Avançado:

master_03

Edite o Parâmetros de Inicialização alterando os parâmetros para onde você irá copiar os arquivos de DATA e LOG. Por exemplo, no meu caso está configurado da seguinte maneira:

-dC:\Program Files\Microsoft SQL Server\MSSQL10_50.ALAN\MSSQL\DATA\master.mdf;-ec:\Program Files\Microsoft SQL Server\MSSQL10_50.ALAN\MSSQL\Log\ERRORLOG;-lC:\Program Files\Microsoft SQL Server\MSSQL10_50.ALAN\MSSQL\DATA\mastlog.ldf

Onde há o parâmetro -d significa o caminho e o arquivo de DATA e o -l para LOG.
Como neste caso eu vou alterar os arquivos para os caminhos “C:\CaminhosSQLServer\LOG” e “C:\CaminhosSQLServer\DATA”, como dito anteriormente, ele deve estar configurado da seguinte maneira:

-dC:\CaminhosSQLServer\DATA\master.mdf;-ec:\Program Files\Microsoft SQL Server\MSSQL10_50.ALAN\MSSQL\Log\ERRORLOG;-lC:\CaminhosSQLServer\LOG\mastlog.ldf

* Não é permitido espaços depois dos parâmetros -d e -l e seus respectivos caminhos.

Em seguida pare o serviço da instância. Com o serviço parado (ele TÊM que estar parado), mova os arquivos de DATA e LOG atuais do database master

Neste exemplo os arquivos estão caminho “C:\Program Files\Microsoft SQL Server\MSSQL10_50.ALAN\MSSQL\DATA\”. Mova os arquivos de LOG e DATA para os respectivos caminhos configurados.

E em seguida inicie o serviço da instância. Se o serviço da instância subir, significa que a mudança do caminho dos arquivos foram feitos com sucesso!

Verifique o novo caminho dos arquivos de LOG e DATA utilizando a mesma query no início do passo-a-passo:

Use master 
GO
EXEC sp_helpfile 

Resultado:

master_04

Feito a mudança dos arquivos de LOG e DATA do database master, vamos executar o passo-a-passo dos demais databases system, no caso as databases: msdb, model e a tempdb.

Neste caso, os passos a serem realizados são mais simples, porém o cuidado deve ser o mesmo! Neste caso farei a mudança de apenas um database, no caso a msdb. Os passos a serem realizados no database msdb são os mesmos para os demais. Você pode fazer a mudança para os três de uma vez só, caso você queira. Não há problema nisso, desde que, claro, seja feito com muita cuidado e atenção.

Neste caso serão realizados 4 passos:
1. Para cada database que terão os arquivos movidos, executar o comando “ALTER DATABASE…MODIFY FILE”;
2. Parar o serviço da instância do SQL Server;
3. Mover os arquivos para os novos caminhos;
4. Iniciar a instância do SQL Server.

Vamos ao exemplo:

Assim como no primeiro passo do database master, obtenha o caminho atual dos arquivos de LOG e DATA do database msdb.

Use msdb
GO
EXEC sp_helpfile 

Guarde o caminho e o nome dos arquivos de LOG e DATA.

master_05

Agora execute o comando a seguir para mover os arquivos de LOG e DATA do database msdb.

USE master
GO
ALTER DATABASE msdb 
	MODIFY FILE 
		(NAME = MSDBData, FILENAME = 'C:\CaminhosSQLServer\DATA\MSDBData.mdf');
GO
ALTER DATABASE msdb 
	MODIFY FILE 
		(NAME = MSDBLog, FILENAME = 'C:\CaminhosSQLServer\LOG\MSDBLog.ldf');
GO

Após executar esta query, você deverá receber esta mensagem:

The file “MSDBData” has been modified in the system catalog. The new path will be used the next time the database is started.
The file “MSDBLog” has been modified in the system catalog. The new path will be used the next time the database is started.

Mova os arquivos de LOG e DATA para os respectivos caminhos conforme o comando feito acima. Agora dê um STOP-START no serviço da instância do SQL Server. Se o serviço da instância subir, significa que a mudança do caminho dos arquivos foram feitos com sucesso!

Verifique novamente o caminho dos arquivos de LOG e DATA utilizando a mesma query no início do passo-a-passo:

Use msdb 
GO
EXEC sp_helpfile 

Resultado:

master_06

É algo simples de ser feito, porém é preciso ser feito com calma e ter cuidado. Todos os passos são importantes. Caso aconteça algo de errado, você não poderá conseguir novamente a instância do SQL Server.

Em caso de erros ao realizar este passo-a-passo, deixe um comentário que eu poderei ajudá-lo da melhor maneira. Em casos de duvidas, também pode deixar um comentário que tentarei respondê-lo o quanto antes.

É isso aí!