Fala Pessoal,

Gostaria de compartilhar com vocês uma experiência que tive no ambiente de banco de dados que administro. Realizando um boot em um dos meus servidores SQL Server devido as atualizações de segurança do windows, uma de minhas databases subiu em modo Suspect. Como essa database é restaurada diariamente do servidor de produção para esse servidor D-1 e é utilizada por poucos relatórios, tive tempo de pesquisar se havia algum modo de recuperá-la sem precisar voltar um backup da mesma.

Mas Fabrício, como vou saber se alguma de minhas databases está em modo Suspect?

R: Além de ser possível visualizar no próprio Object Explore do Management Studio, rodando a query abaixo também podemos verificar se existe alguma database suspect em nosso ambiente:

SELECT NAME,STATE_DESC FROM SYS.DATABASES
WHERE STATE_DESC=’SUSPECT’

Após algumas buscas, encontrei o seguinte artigo onde é ensinado um passo a passo de como voltar uma database em modo suspect: How to repair a Suspect Database in SQL Server.

Esse artigo identifica 5 possíveis motivos para uma database ficar como Suspect, são eles:

1. Database could have been corrupted.

2. There is not enough space available for the SQL Server to recover the database during startup.

3. Database cannot be opened due to inaccessible files or insufficient memory or disk space.

4. Database files are being held by operating system, third party backup software etc.

5. Unexpected SQL Server Shutdown

Tudo indica que comigo aconteceu o problema de número 5. E para resolve-lo, apenas segui o passo a passo desse artigo.

Com a database em estado suspect, não era possível verificar as propriedades e enchergar as tabelas dessa database no Object Explore do Management Studio, o que já deixa os usuários da database bem desesperados com medo de terem perdido os dados.

Para iniciar o processo de recuperação, executei o comando:

ALTER DATABASE NOME_DATABASE SET EMERGENCY

Nesse momento minha database ja estava em modo de emergencia e já era possível acessar as tabelas. Nessa hora já bate um aquele alívio. UFA, minhas tabelas estão acessíveis.

Entretanto, quando uma database está em modo de emergencia ela se torna READ_ONLY e o acesso fica limitado a membros da server role sysadmin. Para deixa minha database online novamente, executei o comando:

ALTER DATABASE NOME_DATABASE SET ONLINE

Minha database ficou totalmente acessível e meus usuários puderam utilizá-la normalmente.

Após deixar a database online, executei o comando DBCC CHECKDB para verificar se existia alguma corrupção nessa base. O resultado foi “found 0 errors and repaired 0 errors”.

Com isso, não precisei restaurar um backup da minha database para poder recuperá-la. Espero que possa ajudar alguém que passe por esse problema. Caso você tenha alguma experiência com uma database Suspect, deixe um comentário para compartilhar sua experiência com outras pessoas.

Abraços,

Fabrício França Lima

MCITP – Database Administrator

Twitter: @fabriciodba

http://fabriciodba.wordpress.com/