Loading…

Casos do Dia a Dia: Servidor sem espaço em disco e SQL Server parado

Olá Pessoal,

Após muito tempo sem postar minhas experiências do dia a dia, vou compartilhar com vocês mais um caso que aconteceu comigo durante uma consultoria.

Cenário: O servidor de banco de dados de um cliente estava com a letra “C:” com ZERO de espaço em disco disponível e com o serviço do SQL Server parado.

Loguei no servidor para analisar o problema e sem pensar muito já transferi alguns arquivos de log do SQL para outra letra desse servidor, já que isso não causa nenhum impacto no banco e libera um pequeno espaço.

Esses logs ficam em:

“C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Log”

Feito isso, liberei 150 MB, mas rapidamente esses 150 MB acabaram porque alguma aplicação estava enchendo um log na letra “C:”.

Como não entendo da aplicação do cliente e só entendo de SQL, continuei minha análise da parte do SQL Server.

Verifiquei que existiam algumas bases na letra “C:”.

Como o serviço do SQL estava parado, movi algumas bases menos críticas para outra letra e liberei 20 GB na letra “C:” do servidor (ele tinha mais de 50 bases no SQL).

Feito isso, o SQL subiu e as principais bases já estavam ONLINE.  Com as principais bases online, a aplicação não estava mais gerando erros e a letra “C:” parou de reduzir seu espaço livre.

Contudo, as bases que precisei mover estavam fora, pois o SQL tinha conhecimento que elas estavam em um local, mas eu alterei esse local com o serviço parado. Dessa forma, a base subiu com o Status Recovery Pending.

Fiz uma simulação desse cenário no meu Notebook. Segue como ficou o status da base:

 

O error log do SQL mostra os erros abaixo:

“Unable to open the physical file “C:\Temp\TesteMovimentacaoBase.mdf”. Operating system error 2: “2(O sistema não pode encontrar o arquivo especificado.)”.”

“FileMgr::StartLogFiles: Operating system error 2(O sistema não pode encontrar o arquivo especificado.) occurred while creating or opening file ‘C:\Temp\TesteMovimentacaoBase_log.ldf’. Diagnose and correct the operating system error, and retry the operation.”

Rodando essa próxima query, conseguimos ver onde o SQL espera que os arquivos dessa base estejam:

select p.name, p.physical_name, p.type_desc from sys.master_files as p
where database_id = db_ID(‘TesteMovimentacaoBase’)

Como eu movi esses arquivos para o caminho “C:\Temp\NovoCaminho\”, tenho que informar isso para o SQL.

Como eu faço isso?

Simples. Basta executar os comandos abaixo:

USE master;
GO
ALTER DATABASE TesteMovimentacaoBase
MODIFY FILE (
NAME = TesteMovimentacaoBase,
FILENAME = ‘C:\Temp\NovoCaminho\TesteMovimentacaoBase.mdf’);
GO
ALTER DATABASE TesteMovimentacaoBase
MODIFY FILE (
NAME = TesteMovimentacaoBase_log,
FILENAME = ‘C:\Temp\NovoCaminho\TesteMovimentacaoBase_log.ldf’);

O SQL retorna essa informação:

The file “TesteMovimentacaoBase” has been modified in the system catalog. The new path will be used the next time the database is started.
The file “TesteMovimentacaoBase_log” has been modified in the system catalog. The new path will be used the next time the database is started.

Após executar o ALTER DATABASE, a base permanece no mesmo status de Recovery Pending.

Como o próprio SQL disse, isso só iria funcionar após a base fosse iniciada. Resolvemos isso com o comando abaixo:

alter database TesteMovimentacaoBase set online

Pronto. Base ONLINE novamente.

Voltando ao caso real, tive que tomar uma decisão rápida para liberar espaço do servidor do cliente e como não sabia se poderia excluir nenhum arquivo do servidor, essa ação de movimentação de algumas bases que nem eram as principais solucionou o problema rapidamente e o SQL já estava no ar em poucos minutos.

Após subir o SQL, o cliente pôde validar com calma o motivo do espaço em disco acabar de forma tão rápida.

Até o próximo caso do dia a dia.

Gostou dessa dica?

Cadastre seu e-mail para receber novos Posts e curta minha Página no Facebook para receber Dicas de Leituras e Eventos sobre SQL Server.

Confira mais experiências do Dia a Dia de um DBA no meu Treinamento de Tarefas do Dia a Dia de um DBA.

Abraços,

Fabrício Lima

MCITP – Database Administrator

Consultor e Instrutor SQL Server

Trabalha com SQL Server desde 2006

5 thoughts on “Casos do Dia a Dia: Servidor sem espaço em disco e SQL Server parado

  1. Solução simples, mas com alto impacto. Típico caso de NNF durante a instalação do SQL Server, normalmente pelo fato do cliente ou técnico que tenha feito a instalação não conhecer nada de SQL Server.

Deixe uma resposta