Movendo System Databases entre unidades

Recentemente, na empresa que trabalho, foi detectado que uma aplicação estava apresentando erro de conexão ao banco. Ao acessar o servidor, identificou-se que o database estava em estado “Recovering…’, não permitindo conexão pela aplicação. Ao analisar as causas, foi identificado que um dos discos do servidor estava apresentando erro:

Evento bad block disco

Verifiquei que o database com problema estava gravado no disco com defeito, sendo o motivo da alteração de estado do database:

Localizacao DB

A solução para o problema é simples: desanexar os databases, trocar o disco, e anexar novamente, porém o database TempDB estava gravado no disco com defeito, e não é possível desanexar system databases do mesmo modo como é feito com users databases. O que fazer ?

Para essa atividade, vamos mover os systems databases em questão para outra unidade. Primeiro, vamos alterar o caminho atual do datafile do TempDB com o comando abaixo:

ALTER DATABASE TempDB MODIFY FILE (NAME = Tempdev, FILENAME = ‘novo_caminho\tempdb.mdf’)

Depois alteramos também o caminho do transaction log:

ALTER DATABASE TempDB MODIFY FILE (NAME = Tempdlog, FILENAME = ‘novo_caminho\templog.ldf’)

(Em NAME, inserimos o nome lógico do arquivo de dados e do log).
Executado o comando, abra um prompt do DOS e execute o seguinte comando (não feche a janela):

NET STOP MSSQLSERVER

(após dar enter, irá ser perguntado se deseja parar o serviço do SQL Agente. Digite Y).
Após o serviço do SQL Server ter sido parado, mova os arquivos de dados e de log do database para o novo local, definido no comando ALTER, e no prompt do DOS inicie o serviço da instância:

NET START MSSQLSERVER

(para iniciar a instância, não será questionado se deseja iniciar o SQL Server Agent. Você deverá fazê-lo manualmente digitando NET START SQLSERVERAGENT).
Após o start do serviço da instância, abra o SQL Server Management Studio e digite o seguinte comando para visualizar o novo caminho dos databases:

SELECT name, physical_name AS LocalizacaoAtual, state_desc
FROM sys.master_files

Localizacao DB

Após todo o processo, podemos trocar o disco defeituoso e refazer o processo novamente para voltar os arquivos de dados dos system databases para o novo disco.

ATENÇÃO: Esse procedimento é aplicado para os system databases Model, MSDB e TempDB. Para o Master e Resource, a alteração é feita através da ferramenta SQL Server Configuration Manager, o qual abordarei em outro artigo.

Abraços e até a próxima.

Movendo System Databases – parte II

Anúncios

2 comentários sobre “Movendo System Databases entre unidades

  1. Pingback: Alterando o Local do TempDb « Alex Souza

  2. Pingback: Recriando as databases de sistema « Alex Souza

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s