Migrando bancos de dados de sistema para outra unidade

Eai Galera!

Nesse post vou 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 algum erro em relação a algum nome, seja de diretório ou nome do arquivo, o serviço do SQL Server não iniciará.

Vamos simular a seguinte situação:

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, utilizar 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, obtemos:

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

Feito isso, utilizar a primeira query para garantir que o diretório foi alterado com sucesso.

Após, devemos parar 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 rodando aquela primeira query, o retorno é o novo diretório. Se sim, podemos remover os arquivos do diretório antigo.

Movendo o banco Master

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

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

GO

Como resultado, obteremos o seguinte retorno:

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

Para ser mais dinâmico e direto, faremos a troca somente pelo SQL Server Configuration Manager.

Para alterar os diretórios de origem do banco, precisamos parar o serviço do SQL Server e devemos abrir como administrador o SQL Server Configuration Manager. Feito isso, clicar com o botão direito no serviço da Engine do SQL Server, abrir as propriedades e selecionar a aba Startup Parameters.

Feito isso, trocar 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:

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, podemos reiniciar o serviço do SQL Server e utilizar 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:

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

Feito isso, é só reiniciar o serviço e os arquivos de tempdb serão criados automaticamente e conferir pela query qual o diretório que está sendo utilizado.

Neste caso temos o retorno:

Este banco se comporta diferente dos anteriores devido aos arquivos de tempdb, sempre que parado o serviço do SQL Server e reiniciado, são criados novamente, assim, podemos saber sempre qual foi a última data que o serviço do SQL Server foi reiniciado.

Abraço e até a próxima!

Deixe uma resposta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.