Corrigindo erros nas tabelas SQL

DEVE-SE FAZER BACKUP DO BANCO DE DADOS PARA RODAR OS COMANDOS ABAIXO !

Listar erros

USE etrade
GO
ALTER DATABASE etrade SET SINGLE_USER; 
/* Coloca o banco em modo single user para executar os comandos abaixo */ 
DBCC CHECKDB ('etrade') WITH TABLOCK, ALL_ERRORMSGS, NO_INFOMSGS; 
ALTER DATABASE etrade SET MULTI_USER;
/* Volta o banco em modo multi user */

Depois de listar, execute este comando (informe o código do erro no lugar do 9999999)

USE etrade
GO    
ALTER DATABASE etrade SET SINGLE_USER;     
DBCC CHECKTABLE(9999999,REPAIR_ALLOW_DATA_LOSS);
ALTER DATABASE etrade SET MULTI_USER;

Recupera o banco com status "SINGLE USER" (usuário único)

ALTER DATABASE etrade SET MULTI_USER;

Recupera o banco com status "SUSPECT" (suspeito)

Caso o banco esteja em "Suspect", execute os comandos abaixo. Mais informações em Repair A Suspect Database

EXEC sp_resetstatus etrade
ALTER DATABASE etrade SET EMERGENCY
DBCC checkdb(etrade)
ALTER DATABASE etrade SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB (etrade, REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE etrade SET MULTI_USER

Quando o banco estiver em modo "EMERGENCY" (Emergencia)

ALTER DATABASE etrade SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB (etrade, REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE etrade SET MULTI_USER

Quando o banco estiver em modo "RESTAURAR" (recuperação pendente)

ALTER DATABASE Etrade SET EMERGENCY;
GO
ALTER DATABASE Etrade set single_user
GO
DBCC CHECKDB (Etrade, REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS;
GO 
ALTER DATABASE Etrade set multi_user
GO 

Recuperar o banco todo

Não é muito aconselhável rodar isso sem antes dar um checkdb pra ver os erros, pois é importante que o banco conheça os erros antes.
Veja mais aqui: SQL SERVER CENTRAL

DBCC CHECKDB(etrade, REPAIR_ALLOW_DATA_LOSS);

Query para ver quais os backups estão salvos no arquivo .bak

Nessa query ele mostra os snapshots de backups no log que fica dentro do .bak

SELECT 
 database_name, name, backup_start_date, backup_finish_date, datediff(mi, backup_start_date, backup_finish_date) [tempo (min)],
 position, first_lsn, last_lsn, server_name, recovery_model, 
 type, cast(backup_size/1024/1024 as numeric(15,2)) [Tamanho (MB)], B.is_copy_only
FROM msdb.dbo.backupset B

Query para restaurar o .bak pelo management

RESTORE DATABASE ETrade FROM DISK = 'C:\txt\Backup_TER.bak' 
WITH REPLACE, FILE = 14,CHECKSUM,NORECOVERY, STATS=10, 
MOVE 'ETrade' TO 'C:\workspace\databases\etrade\ETrade.mdf', 
MOVE 'ETrade_log' TO 'C:\workspace\databases\etrade\ETrade_log.ldf'
;

RESTORE DATABASE ETrade FROM DISK = 'C:\txt\Backup_TER.bak' 
WITH REPLACE, FILE = 6,CHECKSUM,NORECOVERY, STATS=10, 
MOVE 'ETrade' TO 'C:\workspace\databases\etrade\ETrade.mdf', 
MOVE 'ETrade_log' TO 'C:\workspace\databases\etrade\ETrade_log.ldf'
;

RESTORE LOG ETrade FROM DISK = 'C:\txt\Backup_TER.bak' 
WITH NORECOVERY, FILE = 8 
;

RESTORE LOG ETrade FROM DISK = 'C:\txt\Backup_TER.bak' 
 WITH STOPBEFOREMARK = 'lsn:531000001155200278', NORECOVERY; 
 

RESTORE DATABASE ETrade WITH RECOVERY
DBCC CHECKDB('ETrade') 


3
Andre
05/12/2017


Comentários