Reparar Banco de Dados

Para reparar um banco de dados que está em estado suspeito no SQL Server, siga estas etapas:

1. Defina o banco de dados como modo de emergência: Se o estado do banco de dados for realmente suspeito, defina-o como modo de emergência, o que permitirá que você execute tarefas administrativas no banco de dados. Execute o seguinte comando:

ALTER DATABASE seuNomeDeBancoDeDados SET EMERGENCY;

Substitua `'seuNomeDeBancoDeDados'` pelo nome real do seu banco de dados.

2. Defina o banco de dados como modo de usuário único: Para garantir que nenhuma outra conexão de usuário interfira no processo de reparo, defina o banco de dados como modo de usuário único. Execute o seguinte comando:

ALTER DATABASE seuNomeDeBancoDeDados SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

Substitua `'seuNomeDeBancoDeDados'` pelo nome real do seu banco de dados.

3. Tente reparar o banco de dados: Execute o comando `DBCC CHECKDB` com a opção `REPAIR_ALLOW_DATA_LOSS` para tentar o reparo. Execute o seguinte comando:

DBCC CHECKDB ('seuNomeDeBancoDeDados', REPAIR_ALLOW_DATA_LOSS);

Substitua `'seuNomeDeBancoDeDados'` pelo nome real do seu banco de dados.

Observe que a opção `REPAIR_ALLOW_DATA_LOSS` pode resultar em perda de dados, portanto, deve ser usada apenas como último recurso quando você tiver um backup recente do banco de dados e tiver esgotado todas as outras opções.

4. Defina o banco de dados como modo de vários usuários: Após tentar o reparo, defina o banco de dados de volta ao modo de vários usuários para permitir várias conexões de usuário. Execute o seguinte comando:

ALTER DATABASE seuNomeDeBancoDeDados SET MULTI_USER;

Substitua `'seuNomeDeBancoDeDados'` pelo nome real do seu banco de dados.

É importante lembrar que essas etapas devem ser realizadas com cautela, e é recomendável ter um backup do banco de dados antes de tentar qualquer reparo.

Código completo:

ALTER DATABASE seuNomeDeBancoDeDados SET EMERGENCY;
ALTER DATABASE seuNomeDeBancoDeDados SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DBCC CHECKDB ('seuNomeDeBancoDeDados', REPAIR_ALLOW_DATA_LOSS);
ALTER DATABASE seuNomeDeBancoDeDados SET MULTI_USER;

 


Código alternativo:

Código genérico para procurar por erros e reparar o banco de dados:
Trocar todos "yourDBname" pelo nome do banco de dados desejado.

EXEC sp_resetstatus 'yourDBname';
ALTER DATABASE yourDBname SET EMERGENCY
ALTER DATABASE yourDBname SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB ('yourDBname', REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE yourDBname SET MULTI_USER

 


Código alternativo 2:

Versão melhorada, só precisa alterar uma linha:
Trocar "yourDBname" pelo nome do banco de dados desejado.

USE yourDBname

DECLARE @dbname varchar(100);
SET @dbname = (SELECT DB_NAME() AS [Current Database]);
EXEC sp_resetstatus @dbname;
ALTER DATABASE CURRENT SET EMERGENCY
ALTER DATABASE CURRENT SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB (@dbname, REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE CURRENT SET MULTI_USER