Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
73
Assunto : SQL Server
Titulo: Como acessar um banco de dados marcado como suspeito

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :

Translate this page now :






Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon



Quando o SQL Server encontra algo errado com um banco de dados ele marca o banco de dados como suspeito. Só quem já passou por isso conhece o desespero : Você vê o arquivo lá, parece tudo bem, mas ele nega acesso ao banco de dados.

As vezes o problema pode ser grave, mas nem sempre. Pode ocorrer da marca de suspeito ser colocada no banco devido a uma simples falta de espaço no banco de dados. Nesse caso os dados ainda estão acessíveis, só que enquanto o banco estiver marcado como suspeito nada poderá ser feito.

Temos então que retirar a marca de suspeito do banco. Para isso teremos que fazer alterações nas tabelas do sistema. O melhor é criar uma procedure dentro do master que faça isso para nós.

Como essa procedure fará alterações nas tabelas de sistema, teremos que ligar o flag que permite essas alterações antes de criar a procedure e, após cria-la desligar esse flag. Veja :

Para ligar :

USE master
GO
sp_configure 'allow updates', 1
GO
RECONFIGURE WITH OVERRIDE
GO

Para desligar utiliza-se as mesmas instruções, apenas trocando o número 1 por 0.

Agora vamos à procedure. Depois de cria-la com o código abaixo bastará chama-la passando o nome do banco como parâmetro e o estado de suspeito será resetado.


CREATE PROC sp_resetstatus @dbname varchar(30) AS
DECLARE @msg varchar(80)
IF @@trancount > 0
BEGIN
PRINT "Can't run sp_resetstatus from within a transaction."
RETURN (1)
END
IF suser_id() != 1
BEGIN
SELECT @msg = "You must be the System Administrator (SA)"
SELECT @msg = @msg + " to execute this procedure."
RETURN (1)
END
IF (SELECT COUNT(*) FROM master..sysdatabases
WHERE name = @dbname) != 1
BEGIN
SELECT @msg = "Database '" + @dbname + "' does not exist!"
PRINT @msg
RETURN (1)
END
IF (SELECT COUNT(*) FROM master..sysdatabases
WHERE name = @dbname AND status & 256 = 256) != 1
BEGIN
PRINT "sp_resetstatus can only be run on suspect databases."
RETURN (1)
END
BEGIN TRAN
UPDATE master..sysdatabases SET status = status ^ 256
WHERE name = @dbname
IF @@error != 0 OR @@rowcount != 1
ROLLBACK TRAN
ELSE
BEGIN
COMMIT TRAN
SELECT @msg = "Database '" + @dbname + "' status reset!"
PRINT @msg
PRINT " "
PRINT "WARNING: You must reboot SQL Server prior to "
PRINT " accessing this database!"
PRINT " "
END
GO


Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
Nenhum comentário foi realizado ainda. Seja o primeiro !
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br