Alterar pasta (diretório) dos arquivos do Banco de Dados
Na criação de um banco de dados, o SQL Server cria, ao menos, dois arquivos: o arquivo de dados com extensão MDF e o arquivo de transações de log com extensão LDF. Mas... onde esses arquivos são criados? Em que pasta?
Bom, se você não alterou o caminho padrão na instalação do SQL Server e nem nas propriedades do servidor, então todos os arquivos que compõe os bancos de dados serão criados na pasta:
C:\Program Files\Microsoft SQL Server\MSSQL12.SQL2014DEV\MSSQL\DATA
Eu, particularmente, prefiro manter todos os arquivos dos bancos de dados em uma pasta mais fácil de localizar e, na maioria dos casos, temos um segundo ou terceiro disco no servidor. E seria uma boa política manter esses arquivos nesses disco, principalmente se for um disco mais rápido.
Então, como proceder?
Primeiro, vamos descobrir em qual pasta estão os arquivos do BD DBATestes. Para isso, usamos:
sp_helpfile
Esta procedure interna do SQL Server devolve as informações básicas dos arquivos que compõe o BD. Também podemos consultar a tabela de sistema sys.database_files, que traz as mesmas informações de sp_helpfile e algumas a mais.
select * from sys.database_files
Bom, já sabemos onde estão os arquivos das bases de dados, então agora vamos ver como transferí-los para outra pasta. Neste exemplo, o destino dos arquivos é a pasta C:\SQLDATA. Mas pode ser qualquer outra que você queira, inclusive em outros discos existentes no servidor.
É de boa prática ter discos específicos para as bases de dados, diferentes do disco C: para a distribuição de I/O no servidor. Sinta-se à vontade para criar o caminho como for melhor na sua estrutura.
Primeiro, temos que garantir que ninguém está usando o banco de dados. Vamos verificar se tem alguém conectado:
USE master
go
SELECT * FROM sys.sysprocesses WHERE dbid = DB_ID ('DBATestes')
go
Assim que todas as conexões ativas forem encerradas, vamos deixar o BD offline para garantir que ninguém vai acessar a base enquanto trabalhamos:
USE master
go
ALTER DATABASE DBATestes SET OFFLINE WITH ROLLBACK IMMEDIATE
go
Neste ponto, o BD está offline, então podemos mover os arquivos MDF e LDF (e os outros, se houver) para as novas pastas de destino. Aqui, usamos o Windows Explorer mesmo. Um simples COPIAR e COLAR. Eu não gosto de usar o MOVER. Prefiro copiar, validar o funcionamento e depois apagar os arquivos originais.
Com os arquivos nas novas pastas (diretórios), vamos executar uma alteração nas configurações do BD, informando a nova localização dos arquivos:
USE master
go
ALTER DATABASE DBATestes
MODIFY FILE (NAME = 'DBATestes', FILENAME ='C:\SQLDATA\DBATestes.mdf') GO ALTER DATABASE DBATestes
MODIFY FILE (NAME = 'DBATestes_Log', FILENAME ='C:\SQLDATA\DBATestes_Log.ldf') GO
Com a localização dos arquivos atualizadas, basta deixar o BD online novamente:
USE master
go
ALTER DATABASE DBATestes SET ONLINE
go
E, para confirmar que os arquivos estão na pasta correta:
use DBATestes go
exec sp_helpfile go
Outra forma de alterar a localização dos arquivos é utilizando a opção Detach e Attach, depois de garantir que ninguém está usando o BD.
USE master GO ALTER DATABASE DBATestes SET OFFLINE WITH ROLLBACK IMMEDIATE
go
EXEC master.dbo.sp_detach_db @dbname = N'DBATestes' GO
A procedure sp_detach_db desliga o BD da instância do SQL Server. Assim é possível mover os arquivos. Após transferir os arquivos para a pasta de destino (neste caso, estou voltando para a pasta original), executamos o comando:
USE [master] GO CREATE DATABASE [DBATestes]
ON ( FILENAME = N'C:\Program Files\Microsoft SQL
Server\MSSQL12.SQL2014DEV\MSSQL\DATA\DBATestes.mdf' ), ( FILENAME = N'C:\Program Files\Microsoft SQL
Server\MSSQL12.SQL2014DEV\MSSQL\DATA\DBATestes_Log.ldf' ) FOR ATTACH GO
As duas opções chegam ao mesmo resultado. Qual usar? Aquela que você preferir.