Casos do Dia a Dia: Database em modo Suspect
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.
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
olá, Fabrício, repostei o seu artigo no meu blog, mas deixando os devidos créditos. inclusive estou colocando seu blog na minha lista de recomendados.
Sem problemas deblugando. Valeu.
Abraço.
Boa Fabricio, mto claro e objetivo… Abraços
Valeu Fabiano… Abraços
Ótimo Fabrício,
Uma situação interessante e com uma boa explicação.
Parabéns!!
Grande Felipe. Valeu cara.
É isso ai Fabrício..muito bom post.
Abraço,
Valeu Rodrigo.
Olá xará, td blz? tenho o MDF o LDF de um banco, porém não consigo atachar.. ele dá erro.. será que pode me ajudar?
Fala Fabrício. Tudo certo.
Posta essa pergunta no fórum do msdn que eu vou tentar te ajudar, mas se eu não souber outras pessoas te ajudarão com certeza:
http://social.msdn.microsoft.com/Forums/pt-BR/category/sqlserver
Eu recebo todas as perguntas que são incluídas lá no google reader.
Coloca a mensagemm de Erro que está sendo retornada.
Abraços
Olá Fabrico boa tarde tudo bem ??
Cara, esses comandos a cima funcionan em SQL 2008 ??
Obrigado,
Tudo bem João.
Funcionam sim, mas cada caso é um caso. Depende do estado da sua base.
Abraços.
Olá Fabricio,
Trabalho a pouco tempo na manutenção dos servidores e hoje me deparei com a primeira emergência: Após uma queda de Luz, os serviços voltaram sem problemas, más um Banco do SQL Server 2008 voltou em modo SUSPECT, o principal por sinal, utilizado pelo sistema da Secretaria, Financeiro, Administrativo.
Seu artigo foi fundamental para que conseguisse recuperar o banco e voltar o sistema sem nenhum problema.
Cara, meus mais sinceros obrigados!!!
Abraço!!!
Obrigado Juliano. Que bom que te ajudou.
Também fui ajudado por muitos.