Migrando Bancos de Dados de Sistema para Outra Unidade

3 de setembro de 2019 0 Por Oberdan Schaider

Nesse post vamos mostrar como fazer a migração dos arquivos de banco de dados de sistema (master, model, msdb e tempdb) para outra unidade, utilizando o SQL SERVER 2016.

Para isso, precisamos ter atenção em relação ao apontamento feito logicamente no SQL Server. Por exemplo, precisamos alterar nas queries que será mostrado posteriormente, o nome exato do diretório e arquivos. Caso exista erro em relação a algum nome, seja de diretório ou nome do arquivo, o serviço do SQL Server não iniciará.

Vejamos alguns exemplos:

Precisamos migrar os bancos de sistema do diretório default de instalação para uma unidade específica. Nesse exemplo, migraremos para a unidade E:.

Movendo os Bancos model e msdb

Vamos iniciar a mudança de diretório por estes bancos. Para isso, utilizamos a seguinte query para saber qual o diretório original dos mesmos.

select name, physical_name from sys.master_files where database_id = db_id('model')

GO

select name, physical_name from sys.master_files where database_id = db_id('msdb')

GO

Como resultado temos:

O atributo alt desta imagem está vazio. O nome do arquivo é 1.png

Para movê-los, precisaremos trocar o apontamento para o diretório desejado. Nesse caso utilizaremos o E:\SQLSERVER2016\System.
Assim, podemos utilizar o seguinte script:

--------------MODEL-----------------------------
alter database model modify file 
	(name = modeldev, filename = 'E:\SQLSERVER2016\System\model.mdf')
go

alter database model modify file 
	(name = modellog, filename = 'E:\SQLSERVER2016\System\modellog.ldf')
go


-------------MSDB--------------------------------
alter database msdb modify file 
	(name = MSDBData, filename = 'E:\SQLSERVER2016\System\MSDBData.mdf')
go

alter database msdb modify file 
	(name = MSDBLog, filename = 'E:\SQLSERVER2016\System\MSDBLog.ldf')
go

Utilize a primeira query para garantir que o diretório foi alterado com sucesso.

Após, pare o serviço do SQL Server para conseguir trocar o arquivo físico de diretório. Feito isso, podemos copiar manualmente (ctrl + c do diretório antigo e ctrl + v para o novo) e reiniciar o serviço.

Se o serviço “subir”, verifique se está executando aquela primeira query. O retorno será o novo diretório.
Se OK, você pode remover os arquivos do diretório antigo com segurança. 😉

Movendo o Banco master

Para saber onde estão os arquivos do banco, execute a seguinte query:

select name, physical_name from sys.master_files where database_id = db_id('master')

GO

Obtivemos o seguinte retorno:

Feito isso, podemos utilizar o mesmo método que utilizamos anteriormente. Também altere o startup parameters no SQL Server Configuration Manager, para apontar para o mesmo diretório que utilizará na query.

Para sermos mais objetivos, faremos a troca somente pelo SQL Server Configuration Manager.

Para alterar os diretórios de origem do banco, você precisará parar o serviço do SQL Server e abrir como administrador o SQL Server Configuration Manager.

Clique com o botão direito no serviço da Engine do SQL Server, abra as propriedades e selecione a aba Startup Parameters.

O atributo alt desta imagem está vazio. O nome do arquivo é 3-1.png

Troque o diretório dos parâmetros existentes que possuem os diretórios dos arquivos de dados e log (não deve ser removido as iniciais dos parâmetros -d e -l).
Nesse caso, utilizamos o mesmo caminho dos bancos model e msdb: E:\SQLSERVER2016\System\.
Feita a alteração, teremos os seguintes valores para os parâmetros:

O atributo alt desta imagem está vazio. O nome do arquivo é 4-1.png

Assim, é só aplicar a nova configuração e mover os arquivos (ctrl + c e ctrl + v) do banco master do diretório antigo para o novo diretório.

Para finalizar, reinicie o serviço do SQL Server e utilize a primeira query para verificar se o diretório foi trocado com sucesso. 😉

Movendo o tempdb

Para verificar onde o TempDB atualmente está, podemos utilizar a seguinte query:

select name, physical_name from sys.master_files where database_id = db_id('tempdb')

GO

Como retorno temos:

O atributo alt desta imagem está vazio. O nome do arquivo é 5.png

Vamos escolher como destino a unidade D:. Assim, vamos utilizar as seguintes queries:

alter database tempdb modify file 
	(name = tempdev, filename = 'D:\Dados\tempdb.mdf')
go

alter database tempdb modify file 
	(name = templog, filename = 'D:\Log\templog.ldf')
go

Agora é só reiniciar o serviço e os arquivos de tempdb serão criados automaticamente. Confira pela query qual o diretório que está sendo utilizado. Neste caso temos:

O atributo alt desta imagem está vazio. O nome do arquivo é 6.png

Este banco se comporta diferente dos anteriores devido aos arquivos de tempdb, que sempre são recriados quando o serviço do SQL Server é reiniciado. Desta forma, você pode identificar qual foi a última data de reinicialização do serviço.

Ficou com alguma dúvida? Podemos ajudar a sua empresa?
Entre em contato com nossa equipe de DBAs para bater um papo!
http://www.crespidb.com.br/contato