As vezes é necessário realizar a movimentação de datafiles para outras unidade ou para diretórios diferentes para facilitar a organização ou ajudar no espaço em disco. Pois bem neste post irei passar como realizar estas etapas.
Primeiro iremos realizar o comando de move datafile com o banco de dados online, desta forma o comando será validado no dicionário de dados do SQL Server.
ALTER DATABASE TESTE
MODIFY FILE (NAME = TESTE_log,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\LOG_\TESTE_log.ldf')
Veja a saida do resultado
The file "teste_log" has been modified in the system catalog. The new path will be used the next time the database is started.
Completion time: 2021-09-14T03:30:43.5272005+00:00
Bom agora iremos passar o banco de dado para modo offline.
ALTER DATABASE TESTE SET OFFLINE WITH ROLLBACK IMMEDIATE
Nota: Utilizando o rollback immediate derruba qualquer conexão que esteja ativa ainda no banco de dados.
Ao passar a base para modo offline, é hora de copiar ou mover o arquivo desejado para a nova unidade ou diretório necessário. Vale lembrar que se for um novo disco o usuário que inicia o serviço do SQL Server deve ter permissões de escrita e gravação neste disco.
Finalizando a movimentação física do arquivo é hora de passar o banco de dados para modo online.
ALTER DATABASE TESTE SET ONLINE
Momento de validar se a movimentação foi concluída com sucesso.
SELECT name, physical_name AS NewLocation, state_desc AS OnlineStatus
FROM sys.master_files
WHERE database_id = DB_ID(N'TESTE')
GO
Na clausula where informar o nome do banco desejado.
Retorno do select.
name NewLocation OnlineStatus
-------------- ------------------------------------------------------------------------------------ ------------
TESTE C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\TESTE.mdf ONLINE
TESTE_log C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\LOG_\TESTE_log.ldf ONLINE
Boa Sorte.