Movendo Arquivos dos Databases – SQL Server

Neste artigo irei mostrar um método para alterar o caminho dos arquivos de log e data dos databases.

Este método pode ser utilizado do SQL Server 2000 até a mais atual, o SQL Server 2012.

Este método contém os seguintes passos:
• Obter o diretório atual dos arquivos;
• Alterar o database para SINGLE_USER, para fechar todas as conexões no banco;
• Alterar o status do database para OFFLINE para que ele não leia mais os arquivos;
• Realizar o comando T-SQL para fazer o “detach” no database, ou seja, durante este processo o db engine ignora a existência dessa base;
• Mover os arquivos para o novo diretório;
• Realizar o comando T-SQL para fazer o “attach” no database;
• Alterar o status do database para ONLINE para subir o database e para ler os arquivos;
• Alterar o database para MULTI_USER para que outras conexões possam ser abertas;
• Verificar se o diretório foi modificado.

Antes de mostrar um exemplo prático, é necessário estar atento à alguns detalhes:
– Você precisa copiar os arquivos para o caminho novo antes de realizar o comando para efetuar a troca, pois isso dará erro, e mesmo com o erro se você tentar subir o database, o mesmo não achará os arquivos, ou seja, o database não irá subir;
– Apesar de ser bem simples o passo-a-passo, tenha muito cuidado ao escrever o nome da pasta e dos arquivos nos comandos;
– O caminho novo (diretório) precisa que o usuário, da qual é executado o Serviço do SQL Server, tenha permissão para escrever, ler e apagar quaisquer arquivos.

Vamos ao exemplo prático:

Neste exemplo criei um database chamado ALAN_TESTE. Os arquivos de data e log do database (ALAN_TESTE) estão no Dir1. Vou mudar o caminho do arquivo de data (mdf) para outro diretório: \Dir2\Data, e também vou mudar o caminho do arquivo de log (ldf) para outro diretório: \Dir2\Log.

1. Obter o diretório atual dos arquivos

-- ROWS = Arquivos de Data
-- LOG  = Arquivos de Log
SELECT
	Type_Desc, Name, Physical_Name, State_Desc
FROM
	sys.master_files 
WHERE
	database_id = DB_ID(N'ALAN_TESTE')

O resultado:

movedb01

2. Alterar o database para SINGLE_USER

Use master 
GO
ALTER DATABASE ALAN_TESTE
	SET SINGLE_USER
GO

3. Alterar o status do database para OFFLINE

Use master 
GO
ALTER DATABASE ALAN_TESTE
	SET OFFLINE 
GO

4. Realizar o comando T-SQL para fazer o “detach” no database

Use master 
GO
sp_detach_db 'ALAN_TESTE'
GO

5. Mover os arquivos para o novo diretório

Mova o arquivo C:\Dir1\ALAN_TESTE.mdf para o diretório C:\Dir2\Data. E também mova o arquivo C:\Dir1\ALAN_TESTE_log.ldf para o diretório C:\Dir2\Log.

6. Realizar o comando T-SQL para fazer o “attach” no database

Use master 
GO
sp_attach_db 'ALAN_TESTE'
	,'C:\Dir2\Data\ALAN_TESTE.mdf'
	,'C:\Dir2\Log\ALAN_TESTE_log.ldf'
GO

7. Alterar o status do database para ONLINE

Use master 
GO
ALTER DATABASE ALAN_TESTE
	SET ONLINE
GO

8. Alterar o database para MULTI_USER

Use master 
GO
ALTER DATABASE ALAN_TESTE
	SET MULTI_USER
GO

9. Verificar se o diretório foi modificado

-- ROWS = Arquivos de Data
-- LOG  = Arquivos de Log
SELECT
	Type_Desc, Name, Physical_Name, State_Desc
FROM
	sys.master_files 
WHERE
	database_id = DB_ID(N'ALAN_TESTE')

Veja que os diretórios foram alterados com sucesso:

movedb02

Não tem muito segredo, mas é importante fazer com cuidado, seguindo passo-a-passo com calma.
É isso!

2 thoughts on “Movendo Arquivos dos Databases – SQL Server

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s