Loading…

Casos do Dia a Dia – Databases ONLINE e inacessíveis para SELECT

Fala Pessoal,

O tempo está bem curto e por isso faz tempo que não posto por aqui. Semana passada passei por um problema e gostaria de deixar registrado aqui para vocês.

Possuo um servidor SQL Server de homologação que é virtualizado. Algumas databases menores ficam dentro do próprio VHD e as que são maiores ficam em nosso Storage. Após uma tentativa de expansão do tamanho de uma unidade de disco desse servidor (c:), as databases que estavam nas unidades que são armazenadas no Storage ficaram inacessíveis. Elas estavam com o Status ONLINE, entretanto, ao executar um SELECT era gerado um erro. As databases que estavam em um disco local no servidor (dentro do VHD) não tiveram esse problema.

Ao tentar executar um DBCC CHECKDB em uma dessas databases, o erro abaixo era retornado:

Msg 1823, Level 16, State 2, Line 1
A database snapshot cannot be created because it failed to start.

Msg 7928, Level 16, State 1, Line 1
The database snapshot for online checks could not be created. Either the reason is given in a previous error or one of the underlying volumes does not support sparse files or alternate streams. Attempting to get exclusive access to run checks offline.
DBCC results for ‘NOME_DATABASE’. CHECKDB found 0 allocation errors and 0 consistency errors in database ‘NOME_DATABASE’.

Msg 9001, Level 21, State 1, Line 1
The log for database ‘NOME_DATABASE’ is not available. Check the event log for related error messages. Resolve any errors and restart the database.

Msg 823, Level 24, State 2, Line 1
The operating system returned error 21(failed to retrieve text for this error. Reason: 1815) to SQL Server during a read at offset 0x00000000196000 in file ‘X:\NOME_DATABASE_Data.mdf’. Additional messages in the SQL Server error log and system event log may provide more detail. This is a severe system-level error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.

Eu não conseguia nem executar um detach nas databases.

Para resolver esse problema segui os seguintes passos:

1 – Ao tentar deixar a database offline, eu estava sendo bloqueado por outro processo. Com isso, tive que matar todas as conexões da mesma:

alter database database_name set single_user with rollback immediate

2 – Após a execução desse comando a conexão é perdida. Em seguida, devem ser rodados os outros dois comandos abaixo:

alter database database_name set offline
alter database database_name set online

3 – Para finalizar, verifiquei se está tudo certo executando o comando a seguir:

DBCC CHECKDB(‘database_name’)

Nenhum erro foi retornado e a database estava novamente acessível para utilização.

Não sei exatamente o que aconceteu, mas acredito que a VM perdeu a conexão com os discos do Storage temporariamente, o que causou  uma perda de referencia do SQL Server para os arquivos de dados e logs. Se eu tivesse que voltar um restore de todas as databases desse servidor eu iria demorar aproximadamente 8 horas. Espero que possa ajudá-los.

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

18 thoughts on “Casos do Dia a Dia – Databases ONLINE e inacessíveis para SELECT

  1. Será que isso serve de lição para que não tentemos fazer o aumento de um disco com o serviço startado ? Bom, se um dia eu precisar fazer isso, vou ver a possibilidade de parar o serviço.
    abs…

    1. Verdade, Marcel. Nesse caso quando o serviço do SQL Server subisse, as letras já estariam ok.

      No meu caso, por ser um servidor de homologação, um colega de trabalho da infra fez essa alteração durante a noite. Ele disse já tinha feito essa operação em outro servidor e não teve problema.
      O pior é que nem conseguimos expandir o disco com sucesso.

  2. Muito bom, acabou de me ajudar muito. Nunca tinha pego este tipo de situação, até agora pouco quando tive a indisponibilidade do ambiente com isso.
    Ao que tudo indica, no meu caso, a máquina perdeu contato com o Storage devido a um problema no Datacenter.

    Ótimo post e compartilhamento de experiência!

  3. Pessoal, acabou de acontecer em uma base de dados. Estava lendo as postagens de vocês e gostaria de agradecer pelo compartilhamento da informação.
    Esse procedimento resolveu o problema ?
    Eu posso executar esse comando ?

    1. Bom Dia SAmuel,

      No meu caso resolveu sim.

      Colocar uma base OFFLINE e ONLINE pode ser executado sim, mas não garanto que vai funcionar para o seu caso pois não estou vendo. A base pode não querer ficar ONLINE devido a algum tipo de corrupção por exemplo.

  4. Excelenteeeeeeeeeeee dica. Me ajudou muito hoje para resolver um problema onde trabalho. Fabrício agradeço por compartilhar a sua experiência.

Deixe uma resposta