Compartilhe agora:
Conteúdo esconder

DBCC CHECKDB é SQL ServerA principal ferramenta de integridade de banco de dados. Aprenda a usá-la com exemplos, corrigir corrupções e otimizar o desempenho.

1. Importância de SQL Server Saúde do banco de dados

1.1 O que é corrupção de banco de dados Costs Negócios

Hoje, most As empresas armazenam seus dados críticos em bancos de dados. Quando ocorre corrupção de banco de dados, as consequências são catastróficas:

  • Perdas financeiras média de US$ 2.3 milhões anualmente devido à perda de dados, sendo falhas de hardware e corrupção as principais causas (EMC Corporation)
  • Taxas de fechamento de empresas mostram que 50% das pequenas empresas que sofrem perda de dados devido a falhas de hardware fecham as portas em dois anos, enquanto 94% das empresas com perda catastrófica de dados não sobrevivem.
  • Frequência de corrupção de dados afeta 20% dos aplicativos de missão crítica anualmente, causando interrupções na continuidade dos negócios (pesquisa da Gartner)
  • Corrupção relacionada ao hardware é responsável por 67% de todos os incidentes de perda de dados devido a falhas no disco rígido e no sistema, com 40% da perda de dados diretamente atribuída a mau funcionamento do hardware
  • Corrupção de software costs variam de milhares a milhões de dólares, dependendo da gravidade e do escopo, com 82% das empresas sofrendo interrupções não planejadas onde a corrupção foi uma das principais causas

1.2 Por que exames de saúde regulares são essenciais

As pessoas precisam de exames de saúde regulares para detectar precocemente possíveis doenças. Da mesma forma, os bancos de dados também precisam de exames de saúde regulares:

  1. Detecte possíveis casos de corrupção precocemente e lide com ela prontamente, evitando que os problemas se tornem graves e generalizados, o que poderia levar a consequências catastróficas para o negócio.
  2. Garanta que o banco de dados opere com desempenho ideal.
  3. O Cost de verificações proativas de integridade do banco de dados é muito menor do que a recuperação reativa de dados após a ocorrência de um desastre no banco de dados.

1.3 Introdução aos comandos de integridade do banco de dados

SQL Server fornece vários comandos integrados para manter a integridade do banco de dados, com DBCC CHECKDB servindo como o most Ferramenta abrangente de verificação de integridade disponível. Esses comandos trabalham em conjunto para verificar diferentes aspectos da estrutura do seu banco de dados, desde tabelas individuais até a consistência de todo o banco de dados, formando uma estratégia de manutenção completa que mantém seus dados seguros e acessíveis.

2. O que é DBCC CHECKDB

DBCC CHECKDB is SQL Serverprincipal ferramenta para verificar a integridade do banco de dados e identificar problemas de corrupção.

  • É uma instrução T-SQL, não uma ferramenta GUI.
  • Você pode executá-lo por meio de métodos comuns, como SQL Server Estúdio de Gestão (SSMS), SQL Server Agente, SQLCMD, etc.

2.1 O que o CHECKDB realmente verifica em seu banco de dados

Quando você executa o DBCC CHECKDB, o comando executa várias camadas de validação na estrutura do seu banco de dados:

  • Verificação de somas de verificação de páginas para detectar corrupção física e problemas relacionados ao hardware
  • Validação de consistência de índice para garantir a recuperação adequada de dados e o desempenho da consulta
  • Verificações da estrutura de alocação para confirmar o uso preciso do espaço e a alocação de páginas
  • Exame de integridade referencial entre tabelas relacionadas e relacionamentos de chave estrangeira
  • Validação de consistência da tabela do sistema para garantir SQL ServerOs metadados internos permanecem confiáveis
  • Verificação de vinculação de página de dados para confirmar a integridade adequada da cadeia de páginas
  • Consistência do esquema do banco de dados para validar definições e dependências de objetos

Essas verificações abrangentes abrangem tanto os dados do usuário quanto as estruturas do sistema, fornecendo visibilidade completa do status de integridade do seu banco de dados.

3. Executando DBCC CHECKDB: passo a passo

Pré-requisitos 3.1

Abaixo está a lista de verificação antes de executar qualquer operação DBCC CHECKDB:

  • Backup completo do banco de dados – Crie um backup completo antes de executar verificações de integridade como sua rede de segurança caso corrupção seja descoberta ou operações de reparo se tornem necessárias.
  • Permissões adequadas – Você precisa de permissões de sysadmin ou db_owner para executar comandos DBCC CHECKDB
  • Recursos de sistema suficientes:
    • Memória: 25% do tamanho do banco de dados
    • Espaço Tempdb: 10-15% do tamanho do banco de dados
    • CPU: 50-70% de disponibilidade durante a manutenção
    • E/S: espere operações de leitura pesadas
  • Acessibilidade do banco de dados – Verifique se o seu banco de dados está acessível e não em estado restrito, pois o CHECKDB requer acesso de leitura a todas as páginas do banco de dados

3.2 Comando Básico

O most O comando básico DBCC CHECKDB inclui três variações comuns:

(1) Verifique o banco de dados atual (sem parâmetros):

DBCC CHECKDB

(2) Verifique um banco de dados pelo nome:

DBCC CHECKDB ('YourDatabaseName')

(3) Verifique um banco de dados por ID:

DBCC CHECKDB(5)  -- Replace 5 with your database ID

Este comando fundamental executa uma verificação completa da integridade do banco de dados especificado, examinando todas as tabelas, índices e estruturas do sistema. Para bancos de dados com nomes padrão sem espaços, você pode omitir as aspas. O comando será executado até a conclusão, exibindo mensagens de progresso e resultados finais. Esta sintaxe básica funciona perfeitamente para bancos de dados menores ou quando você tem bastante tempo disponível para manutenção.

Abaixo está uma captura de tela da execução do DBCC CHECKDB em SQL Server Estúdio de Gerenciamento (SSMS):

Uma captura de tela da execução do DBCC CHECKDB em SQL Server Management Studio (SSMS), incluindo os resultados de saída.

3.3 Opções Completas

Abaixo estão as opções completas para DBCC CHECKDB:

Categoria Opção Descrição Exemplo de DBCC CHECKDB
Opções de reparo REPAIR_REBUILD Reparos sem perda de dados (por exemplo, reconstruções de índice) DBCC CHECKDB ('MyDB', REPAIR_REBUILD)
REPAIR_FAST Sem reparo. Somente compatibilidade com versões anteriores. DBCC CHECKDB ('MyDB', REPAIR_FAST)
REPAIR_ALLOW_DATA_LOSS Repara todos os erros (pode causar perda de dados) DBCC CHECKDB ('CorruptDB', REPAIR_ALLOW_DATA_LOSS)
Controle de escopo NOINDEX Ignora verificações de índice não agrupado DBCC CHECKDB ('LargeDB', NOINDEX)
PHYSICAL_ONLY Verifica apenas a integridade do armazenamento físico (páginas/registros) DBCC CHECKDB ('ProdDB', PHYSICAL_ONLY)
DATA_PURITY Verifica se há erros lógicos de valores de colunas (por exemplo, datas inválidas) DBCC CHECKDB ('OldDB', DATA_PURITY)
EXTENDED_LOGICAL_CHECKS Verificações lógicas profundas (visualizações indexadas, índices XML/espaciais) DBCC CHECKDB ('ComplexDB', EXTENDED_LOGICAL_CHECKS)
Controle de saída ALL_ERRORMSGS Mostra todos os erros (padrão: 200 por objeto) DBCC CHECKDB ('MyDB', ALL_ERRORMSGS)
NO_INFOMSGS Oculta mensagens informativas DBCC CHECKDB ('MyDB', NO_INFOMSGS)
Desempenho TABLOCK Usa bloqueios de tabela (reduz o uso do TempDB, mas bloqueia as gravações) DBCC CHECKDB ('BigDB', TABLOCK)
MAXDOP = number Substitui as configurações de paralelismo DBCC CHECKDB ('MyDB', MAXDOP = 2)
Utilidade ESTIMATEONLY Estima o espaço necessário no TempDB. (sem verificação real) DBCC CHECKDB ('MyDB', ESTIMATEONLY)

4. Compreendendo seus resultados

DBCC CHECKDB produzirá resultados diferentes dependendo se sua execução for concluída com sucesso ou não. Vamos explicá-los em detalhes.

4.1 A execução do CHECKDB foi concluída com sucesso

Se a execução do DBCC CHECKDB for concluída com sucesso, ele relatará diferentes tipos de resultados dependendo do status de integridade do seu banco de dados.

4.1.1 Nenhum problema encontrado

Se o DBCC CHECKDB não encontrar nenhum problema, você verá uma saída semelhante a:

CHECKDB found 0 allocation errors and 0 consistency errors in database 'YourDatabase'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Este resultado indica que seu banco de dados mantém integridade perfeita em todas as estruturas verificadas.

4.1.2 Erros de Corrupção Encontrados

Sempre que o DBCC CHECKDB detectar um erro de corrupção, ele relatará uma mensagem de erro com a seguinte estrutura:
Uma explicação detalhada da estrutura da mensagem de erro DBCC CHECKDB, incluindo o significado de cada parte.Guia de níveis de gravidade:

  • Nível 16-19: Erros corrigíveis pelo usuário, geralmente pequenas corrupções
  • Nível 20-24: Erros de sistema, corrupção grave que requer atenção imediata
  • Nível 25: Erros fatais, o banco de dados pode ficar inacessível

Erros comuns incluem:

  • Falhas de verificação de soma de página (mensagem 824)
  • Erros de alocação (mensagem 8928)
  • Problemas de consistência de índice (mensagem 8964)

Entender a estrutura da mensagem ajuda a priorizar ações de resposta e determinar estratégias de recuperação apropriadas.

4.1.3 Mensagens informativas e de advertência comuns

Nem todas as saídas do DBCC CHECKDB indicam problemas sérios. Elas também podem gerar algumas mensagens informativas e de aviso, incluindo:

  • Declarações de reparo – Mensagens que sugerem comandos de reparo para corrigir pequenos problemas
  • Avisos de alocação – Avisos sobre alocação de espaço que não afetam o acesso aos dados
  • Recomendações de desempenho – Sugestões para manutenção e otimização de índices
  • Avisos informativos – Mensagens de status gerais que não exigem ação imediata

Essas mensagens fornecem orientações valiosas de manutenção, ao mesmo tempo em que distinguem entre corrupção crítica que exige ação imediata e problemas menores que podem ser resolvidos durante janelas de manutenção regulares.

Exemplo de mensagem de aviso:

DBCC results for 'InventoryDatabase'.
Msg 2570, Level 16, State 3, Line 1
Page (2:8452), slot 17 in object ID 485577333, index ID 0, partition ID 72057594038845456, 
alloc unit ID 72057594042515968 (type "In-row data").
Column "ProductPrice" value is out of range for data type "decimal". Update column to a legal value.
There are 45892 rows in 1247 pages for object "Products".
CHECKDB found 0 allocation errors and 1 consistency errors in table 'Products' (object ID 485577333).
CHECKDB found 0 allocation errors and 1 consistency errors in database 'InventoryDatabase'.

4.2 Abortamento da execução do CHECKDB

Se CHECKDB for abortado durante sua execução devido a vários motivos, ele reportará uma mensagem de erro e adicionará um log de erro com o código de estado abaixo:

Estado Descrição
0 O erro número 8930 foi gerado. Isso indica uma corrupção nos metadados que encerrou o comando DBCC.
1 Foi gerado o erro número 8967. Houve um erro interno do DBCC.
2 Ocorreu uma falha durante o reparo do banco de dados no modo de emergência.
3 Isso indica uma corrupção nos metadados que encerrou o comando DBCC.
4 Uma afirmação ou violação de acesso foi detectada.
5 Ocorreu um erro desconhecido que encerrou o comando DBCC.

Exemplo de mensagem de erro:

Failed:(-1073548784) Executing the query "DBCC CHECKDB('InventoryDB') WITH NO_INFOMSGS" failed with the following error: "There is insufficient system memory to run this query.Check terminated. A failure was detected while collecting facts. Possibly tempdb out of space or a system table is inconsistent. Check previous errors.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

ou

2024-11-18 09:52:41.38 spid35 I/O error (bad page ID) detected during read at offset 0x00000024886000 in file 'C:\Data\MSSQL\DATA\SalesDatabase.mdf'.

Exemplo de log de erros:

11/15/2024 09:23:17,spid52,Unknown,DBCC CHECKDB (SalesDatabase) WITH all_errormsgs no_infomsgs executed by CORP\dbadmin terminated abnormally due to error state 3. Elapsed time: 1 hours 32 minutes 18 seconds.

Nesse caso, você pode tentar opções avançadas alternativas, como DataNumen SQL Recovery para corrigir a corrupção no seu banco de dados.

5. Corrigindo erros de corrupção

5.1 Backup e restauração: a solução mais segura

Quando o DBCC CHECKDB identifica erros de corrupção, a restauração de um backup limpo representa a maneira mais segura e eficiente de fazer isso.ost solução confiável. Essa abordagem garante a integridade dos dados, eliminando as causas subjacentes de corrupção. Antes de restaurar, verifique a integridade do backup usando RESTAURAR SOMENTE VERIFICAÇÃO comandos e considere opções de recuperação pontuais para minimizar a perda de dados. Documente os detalhes da corrupção para análise da causa raiz, pois problemas de hardware ou bugs de software podem exigir atenção adicional para evitar recorrências.

5.2 Soluções para Corrupção em Nível de Página

Para corrupção de página isolada que afeta pequenas porções de dados, SQL Server A Edição Enterprise oferece recursos de restauração de páginas que reparam páginas danificadas específicas sem a necessidade de restauração completa do banco de dados. Essa técnica avançada requer um modelo de recuperação completo e backups de log atualizados.

Processo de restauração de página passo a passo:

  1. Identifique a página corrompida da mensagem de erro CHECKDB (por exemplo, página 1:256)
  2. Faça um backup do log atual para capturar transações recentes:
BACKUP LOG YourDatabase TO DISK = 'C:\Backups\YourDB_Log.trn'
  1. Restaurar a página corrompida do most backup completo recente:
RESTORE DATABASE YourDatabase PAGE = '1:256' 
FROM DISK = 'C:\Backups\YourDB_Full.bak'
  1. Aplicar backup diferencial (se disponível):
RESTORE DATABASE YourDatabase PAGE = '1:256' 
FROM DISK = 'C:\Backups\YourDB_Diff.bak'
  1. Aplicar todos os backups de log em sequência, incluindo o que acabamos de criar:
RESTORE LOG YourDatabase FROM DISK = 'C:\Backups\YourDB_Log1.trn'
RESTORE LOG YourDatabase FROM DISK = 'C:\Backups\YourDB_Log2.trn'
-- Continue for all log backups in order
RESTORE LOG YourDatabase FROM DISK = 'C:\Backups\YourDB_Log.trn'
  1. Faça um backup final do log e restaure para atualizar a página:
BACKUP LOG YourDatabase TO DISK = 'C:\Backups\YourDB_Final.trn'
RESTORE LOG YourDatabase FROM DISK = 'C:\Backups\YourDB_Final.trn'

Alternativa para dados não críticos: Se a corrupção afetar dados não críticos, você pode exportar linhas não afetadas para novas tabelas antes de reconstruir estruturas corrompidas:

-- Export good data to a new table
SELECT * INTO YourTable_Backup 
FROM YourTable 
WHERE NOT EXISTS (SELECT 1 FROM corrupt_page_list WHERE page_id = target_page)

-- Drop and recreate the corrupted table
DROP TABLE YourTable
-- Recreate table structure and reload clean data

5.3 Correções rápidas para corrupção de índice

A corrupção do índice geralmente responde bem às operações de reconstrução que recriam estruturas de índice sem afetar os dados da tabela subjacente:

ALTER INDEX ALL ON YourTable REBUILD

Essa abordagem funciona particularmente bem para corrupção de índice não agrupado, pois a reconstrução regenera páginas de índice a partir de dados da tabela de origem, eliminando efetivamente a corrupção e preservando todas as informações originais.

6. Use REPAIR_REBUILD e REPAIR_ALLOW_DATA_LOSS

Se todos os métodos anteriores falharem ou não forem viáveis, você poderá usar as opções REPAIR_REBUILD e REPAIR_ALLOW_DATA_LOSS para reparar o banco de dados.

6.1 REPAIR_REBUILD (Opção mais segura):

  • Use para: Corrupção de índice e pequenos erros de alocação
  • Segurança de dados: Tenta corrigir a corrupção sem excluir dados
  • Nível de risco: Baixo – nenhuma perda de dados esperada
  • Cenários típicos: Corrupção de índice não agrupado, pequenos problemas de metadados
  • Exemplo de comando: DBCC CHECKDB('YourDB', REPAIR_REBUILD)

6.2 REPARAR_PERDER_DADOS (Último recurso):

  • Use para: Corrupção grave quando os backups não estão disponíveis
  • Segurança de dados: Pode excluir dados corrompidos para restaurar a funcionalidade do banco de dados
  • Nível de risco: Alto – possível perda permanente de dados
  • Cenários típicos: Corrupção de página, danos à tabela do sistema, erros na cadeia de alocação
  • Exemplo de comando: DBCC CHECKDB('YourDB', REPAIR_ALLOW_DATA_LOSS)

6.3 Melhores práticas para essas opções:

  • Sempre teste operações de reparo em cópias de banco de dados quando possível
  • Sempre faça backup antes de executar essas opções
  • Documentar todas as alterações para fins de conformidade e solução de problemas
  • Definir o banco de dados para o modo de usuário único antes de executar operações de reparo

Normalmente, deveríamos tentar REPARO_RECONSTRUÇÃO opção primeiro. Se falhar, tente REPAIR_ALLOW_DATA_LOSS opção.

6.4 Resultados de REPAIR_ALLOW_DATA_LOSS

6.4.1 O reparo foi bem-sucedido com perda de dados

Às vezes o REPAIR_ALLOW_DATA_LOSS a opção terá sucesso, mas alguns dados são lost após o reparo.

Abaixo estão alguns exemplos de mensagens:

CHECKDB found 0 allocation errors and 103 consistency errors in database ‘SalesDatabase’.
CHECKDB fixed 0 allocation errors and 103 consistency errors in database ‘SalesDatabase’.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Msg 8909, Level 16, State 1, Line 8
Table error: Object ID 0, index ID -1, partition ID 0, alloc unit ID 45035996309880832 (type Unknown), page ID (1:553) contains an incorrect page ID in its page header. The PageId in the page header = (0:0).
The error has been repaired.
Msg 8939, Level 16, State 98, Line 8
Table error: Object ID 0, index ID -1, partition ID 0, alloc unit ID 111464090777419776 (type Unknown), page (0:0). Test (IS_OFF (BUF_IOERR, pBUF->bstat)) failed. Values are 2057 and -1.
Could not repair this error.

Isso ocorre porque o DBCC CHECKDB corrige o banco de dados abandonando alguns registros danificados, mas, na verdade, most deles ainda podem ser recuperados via DataNumen SQL Recovery.

Arquivos de amostra:

SQL Server versão Arquivo MDF corrompido Arquivo MDF corrigido por DataNumen SQL Recovery
SQL Server 2014 Erro10_1.mdf (Msg 8909 seguida de Msg 8939) (600 registros lost com REPAIR_ALLOW_DATA_LOSS) Erro10_1_fixed.mdf (Nenhum registro lost)
SQL Server 2014 Erro10_2.mdf (Msg 8909 seguida de Msg 8939) (6000 registros (50%) lost com REPAIR_ALLOW_DATA_LOSS) Erro10_2_fixed.mdf (Apenas 100 registros lost)
SQL Server 2014 Error7.mdf (100 registros lost com REPAIR_ALLOW_DATA_LOSS) Erro7_fixed.mdf (Apenas um registro lost)

6.4.2 Falhas no reparo – Considere uma solução profissional

If REPAIR_ALLOW_DATA_LOSS falhar, ele emitirá uma ou mais mensagens de erro.

Abaixo estão alguns exemplos:

DBCC results for ‘MyDatabase’.
CHECKDB found 0 allocation errors and 0 consistency errors in database ‘MyDatabase’.
Msg 824, Level 24, State 2, Line 8
SQL Server detected a logical consistency-based I/O error: incorrect checksum (expected: 0xea8a9a2f; actual: 0x37adbff8). It occurred during a read of page (1:28) in database ID 39 at offset 0x00000000038000 in file ‘MyDatabase.mdf’. Additional messages in the SQL Server error log or system event log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.
Msg 7909, Level 20, State 1, Line 8
The emergency-mode repair failed.You must restore from backup.
Msg 8992, Level 16, State 1, Line 8
Check Catalog Msg 3852, State 1: Row (object_id=69) in sys.objects (type=S ) does not have a matching row (object_id=69,column_id=1) in sys.columns.
Msg 8945, Level 16, State 1, Line 8
Table error: Object ID 41, index ID 1 will be rebuilt.
Could not repair this error.
Msg 2510, Level 16, State 17, Line 8
DBCC checkdb error: This system table index cannot be recreated.
Repair: The Nonclustered index successfully rebuilt for the object “sysidxstats” in database “MyDatabase”.
Msg 8921, Level 16, State 1, Line 8
Check terminated. A failure was detected while collecting facts. Possibly tempdb out of space or a system table is inconsistent. Check previous errors.
Msg 8998, Level 16, State 2, Line 8
Page errors on the GAM, SGAM, or PFS pages prevent allocation integrity checks in database ID 39 pages from (1:0) to (1:8087). See other errors for cause.
CHECKDB found 1 allocation errors and 0 consistency errors not associated with any single object.
Msg 2575, Level 16, State 1, Line 8
The Index Allocation Map (IAM) page (1:157) is pointed to by the next pointer of IAM page (0:0) in object ID 3, index ID 1, partition ID 196608, alloc unit ID 196608 (type In-row data), but it was not detected in the scan.
Could not repair this error.
CHECKDB found 1 allocation errors and 0 consistency errors in table ‘sys.sysrscols’ (object ID 3).
Msg 8948, Level 16, State 3, Line 8
Database error: Page (1:295) is marked with the wrong type in PFS page (1:1). PFS status 0x70 expected 0x60.
The error has been repaired.
Msg 8905, Level 16, State 1, Line 8
Extent (1:296) in database ID 39 is marked allocated in the GAM, but no SGAM or IAM has allocated it.
The error has been repaired.
Msg 5028, Level 16, State 4, Line 4
The system could not activate enough of the database to rebuild the log.
Msg 5125, Level 24, State 2, Line 2
File ‘C:Program FilesMicrosoft SQL ServerMSSQL12.SQL2014MSSQLDATASalesDatabase.mdf’ appears to have been truncated by the operating system. Expected size is 5120 KB but actual size is 5112 KB.
Msg 3414, Level 21, State 1, Line 2
An error occurred during recovery, preventing the database ‘SalesDatabase’ (39:0) from restarting. Diagnose the recovery errors and fix them, or restore from a known good backup. If errors are not corrected or expected, contact Technical Support.
Msg 3313, Level 21, State 1, Line 2
During redoing of a logged operation in database ‘SalesDatabase’, an error occurred at log record ID (135:752:2). Typically, the specific failure is previously logged as an error in the Windows Event Log service. Restore the database from a full backup, or repair the database.

Nesses cenários, você precisa usar uma solução profissional como DataNumen SQL Recovery para consertar seu banco de dados.

Arquivos de amostra

SQL Server versão Arquivo MDF corrompido Arquivo MDF corrigido por DataNumen SQL Recovery
SQL Server 2014 Erro1_3.mdf (Mensagem única 824) Erro1_3_fixed.mdf
SQL Server 2014 Erro1_1.mdf (Erros contínuos de mensagem 824) Erro1_1_fixo.mdf
SQL Server 2014 Erro1_2.mdf ((Msg 824 seguida de Msg 7909) Erro1_2_fixed.mdf
SQL Server 2014 Erro4_1.mdf (Msg 8992 seguida de Msg 3852) Erro4_1_fixed.mdf
SQL Server 2014 Erro4_2.mdf (Msg 8992 seguida de Msg 3852) Erro4_2_fixed.mdf
SQL Server 2014 Erro5.mdf (Mensagem 8945) Erro5_fixed.mdf
SQL Server 2014 Erro6.mdf (Mensagem 2510) Erro6_fixed.mdf
SQL Server 2014 Erro2.mdf (Mensagem 2575) Erro2_fixed.mdf
SQL Server 2014 Erro11.mdf (Mensagem 8905) Erro11_fixed.mdf
SQL Server 2014 Erro3.mdf (Mensagem 5028) Erro3_fixed.mdf
SQL Server 2014 Error8.mdf (Mensagem 5125) Error8_fixo.mdf
SQL Server 2014 Erro9.mdf (Mensagem 3313) Erro9_fixed.mdf

7. Práticas recomendadas

7.1 Agendamento de operações regulares do CHECKDB

Implemente a execução semanal do DBCC CHECKDB para bancos de dados de produção críticos, com verificações diárias para sistemas com alto índice de transações. Agende operações durante períodos de baixa utilização para minimizar o impacto no desempenho e considere alternar entre verificações completas e opções PHYSICAL_ONLY com base no tamanho do banco de dados e nas janelas de manutenção. Agendamento automatizado por meio de SQL Server O agente garante execução consistente ao mesmo tempo em que fornece recursos centralizados de monitoramento e alerta.

7.2 Gestão de Impacto no Desempenho

As operações DBCC CHECKDB consomem recursos significativos do sistema, potencialmente afetando a atividade simultânea do usuário. Monitore a utilização da CPU, o consumo de memória e a E/S de disco durante as verificações para entender os padrões de impacto no desempenho. Considere usar opções NOINDEX para verificações de rotina, reservando a validação completa para as janelas de manutenção mensais. Implemente extensões de tempo limite de consulta e estratégias de comunicação com o usuário para gerenciar as expectativas durante os períodos de verificação de integridade.

7.3 Planejamento da janela de manutenção

Coordene o agendamento do DBCC CHECKDB com outras atividades de manutenção, como operações de backup, reconstrução de índices e atualizações de estatísticas. Evite a sobreposição de operações que exigem muitos recursos, o que pode causar degradação do desempenho ou problemas de timeout. Planeje as janelas de manutenção com base nas projeções de crescimento do tamanho do banco de dados, garantindo tempo suficiente para a verificação completa da integridade conforme o aumento do volume de dados.

7.4 Monitoramento e alerta automatizados

configurar SQL Server Alertas de agente para notificar os administradores imediatamente quando o DBCC CHECKDB identificar corrupção. Implemente soluções de análise de logs que extraiam e categorizem os resultados da verificação de integridade, permitindo a análise de tendências e a identificação proativa de problemas. Crie procedimentos de escalonamento que definam prazos de resposta e pessoal responsável para diferentes níveis de gravidade de corrupção.

8. DBCC CHECKTABLE: A alternativa leve

8.1 Quando usar CHECKTABLE em vez de CHECKDB

O DBCC CHECKTABLE fornece verificação de integridade focada para tabelas individuais, tornando-o ideal para tarSolução de problemas e manutenção de objetos específicos do banco de dados. Utilize CHECKTABLE ao investigar problemas de desempenho com tabelas específicas, validar tabelas críticas de negócios entre verificações completas do banco de dados ou quando restrições de tempo impedem a validação completa do banco de dados. Essa abordagem se mostra especialmente valiosa em bancos de dados grandes, onde as operações CHECKDB completas excedem as janelas de manutenção disponíveis.

8.2 Sintaxe e exemplos de DBCC CHECKTABLE

O comando básico CHECKTABLE tarobtém tabelas específicas:

DBCC CHECKTABLE('YourTable')

Assim como o CHECKDB, o CHECKTABLE suporta várias opções, incluindo NOINDEX para otimização de desempenho e parâmetros de reparo para resolução de corrupção. Você também pode especificar nomes de esquema para identificação precisa de tabelas:

DBCC CHECKTABLE('SchemaName.TableName', NOINDEX)

Esta tarA abordagem aprimorada permite a verificação granular da integridade, mantendo o desempenho do sistema durante o horário comercial.

8.3 Benefícios de desempenho para grandes bancos de dados

As operações CHECKTABLE são concluídas significativamente mais rápido do que as verificações completas do banco de dados, permitindo verificações de integridade mais frequentes de tabelas críticas. Essa abordagem permite a validação diária de tabelas essenciais para o negócio, reservando operações CHECKDB abrangentes para agendamentos semanais ou mensais. O consumo reduzido de recursos torna o CHECKTABLE adequado para execução em ambientes de produção com impacto mínimo para o usuário.

9. Quando o CHECKDB falha

O DBCC CHECKDB falhará em vários cenários, incluindo:

Nesses cenários, precisamos de uma ferramenta mais profissional para nos ajudar a corrigir as corrupções no banco de dados.

9.1 Introdução ao DataNumen SQL Recovery

DataNumen SQL Recovery fornece recursos mais avançados:

  • Melhor taxa de recuperação na indústria.
  • Recupere arquivos de banco de dados gravemente corrompidos.
  • Recupere todos os objetos do banco de dados, incluindo tabelas, índices, visualizações, gatilhos, regras e padrões.
  • Recupere procedimentos armazenados, funções escalares, funções com valor de tabela embutidas e funções com valor de tabela de várias instruções.
  • Recupere registros excluídos permanentemente.
  • Descriptografar objetos criptografados em SQL Server bases de dados.
  • Reparar arquivos MDF em lote.
  • Opções abrangentes de reparo.
  • Registro e relatórios avançados.
  • Suporte para todos SQL Server versões.
  • Disponibilidade de suporte técnico
  • Atualizações e melhorias regulares

9.2 Comparação de taxas de sucesso

As taxas de sucesso de recuperação diferem significativamente:

  • DBCC CHECKDB e CHECKTABLE: 1.27% taxa média de recuperação
  • DataNumen: 92.6% taxa de recuperação

Abaixo está uma comparação competitiva completa:

Um gráfico comparativo das taxas de recuperação entre DataNumen SQL Recovery e outros concorrentes, incluindo DBCC CHECKDB e CHECKTABLE.

9.3 Recuperação de Corrupção Grave

Recursos avançados para casos graves:

  • Recuperação de armazenamento fisicamente danificado
  • Recuperação de unidades formatadas ou sistemas travados
  • Recuperar de imagens de disco, arquivos de backup, arquivos de disco de máquina virtual, temporararquivos y, etc.

9.4 Quando considerar soluções profissionais

  • Nenhuma disponibilidade de backup recente
  • Falha no DBCC CHECKDB
  • Cenários de corrupção grave
  • Lidando com dados empresariais críticos
  • Quando o tempo é crítico
  • Quando a recuperação máxima é essencial

10. FAQs

10.1 Perguntas básicas de uso

P: Com que frequência devo executar o DBCC CHECKDB?

A: Para bancos de dados de produção críticos, execute CHECKDB semanalmente. Para sistemas com alto volume de transações, considere verificações diárias usando a opção PHYSICAL_ONLY, com verificações completas semanais. Bancos de dados de desenvolvimento podem ser verificados mensalmente.

P: Posso executar o DBCC CHECKDB em um banco de dados de produção ativo?

A: Sim, o DBCC CHECKDB pode ser executado em bancos de dados online sem bloquear usuários. No entanto, ele consome recursos significativos, portanto, agende-o durante períodos de baixa atividade e monitore o desempenho do sistema.

P: Qual é a diferença entre CHECKDB e CHECKTABLE?

A: CHECKDB examina todo o banco de dados, enquanto CHECKTABLE se concentra em tabelas individuais. Use CHECKTABLE para tarsolução de problemas ou quando você precisa verificar tabelas específicas sem escanear o banco de dados inteiro.

10.2 Questões de desempenho e recursos

P: Por que o DBCC CHECKDB está demorando tanto no meu banco de dados grande?

A: A duração do CHECKDB depende do tamanho do banco de dados, do desempenho do hardware e das opções utilizadas. Use PHYSICAL_ONLY para verificações mais rápidas ou NOINDEX para ignorar índices não agrupados. Considere executar durante janelas de manutenção com recursos dedicados.

P: Quanto espaço tempdb o CHECKDB precisa?

A: Geralmente, reserve de 10 a 15% do tamanho do seu banco de dados para tempdb durante as operações CHECKDB. Use a opção ESTIMATEONLY para obter estimativas precisas: DBCC CHECKDB('YourDB') WITH ESTIMATEONLY

P: Posso cancelar uma operação CHECKDB em execução?

A: Sim, você pode cancelar o CHECKDB usando o comando KILL no ID da sessão. No entanto, o cancelamento não fornece informações sobre a integridade do banco de dados, e você precisará executá-lo novamente mais tarde.

10.3 Perguntas sobre tratamento de erros

P: O CHECKDB encontrou erros – devo entrar em pânico?

A: Não entre em pânico, mas aja rapidamente. Primeiro, determine se o CHECKDB foi concluído com sucesso, mas encontrou corrupção, ou se o próprio CHECKDB falhou ao executar. Verifique se os erros afetam apenas índices não clusterizados (menos críticos) ou dados de tabela (mais sérios).

P: Quando devo usar REPAIR_ALLOW_DATA_LOSS?

A: Somente como último recurso absoluto, quando você não tiver backups utilizáveis ​​e a perda de dados for aceitável em comparação com a perda total do banco de dados. Sempre tente restaurar a partir do backup primeiro, pois operações de reparo podem causar perda permanente de dados.

P: O que significa “erros de consistência no banco de dados” versus “erros de alocação”?

A: Erros de alocação afetam como SQL Server rastreia o uso do espaço em disco, enquanto erros de consistência indicam problemas com dados ou estruturas de índice. Ambos exigem atenção, mas erros de consistência geralmente impactam a acessibilidade dos dados de forma mais direta.

10.4 Perguntas sobre backup e recuperação

P: Devo executar o CHECKDB nos meus backups?

A: Com certeza! Execute o CHECKDB após restaurar os backups para os servidores de teste. Isso verifica a integridade do backup e garante que você possa realmente se recuperar da corrupção. Automatize esse processo, se possível.

P: Meu backup também está corrompido. E agora?

A: Tente backups mais antigos até encontrar um limpo. Se não houver backups limpos, considere soluções de recuperação profissionais como DataNumen SQL Recovery. Documente o cronograma da corrupção para evitar ocorrências futuras.

P: A restauração de páginas pode corrigir a corrupção sem a recuperação completa do banco de dados?

A: Sim, mas apenas em SQL Server Edição Enterprise com modelo de recuperação completo e backups de log atualizados. A restauração de páginas funciona para corrupção de páginas isoladas, mas requer execução cuidadosa seguindo os procedimentos adequados.

10.5 Perguntas para solução de problemas

P: O CHECKDB está falhando com erros de “falta de espaço” – o que posso fazer?

A: Libere espaço no tempdb, mova o tempdb para um armazenamento mais rápido ou use a opção TABLOCK para reduzir o uso do tempdb. Considere executar CHECKDB com NOINDEX ou PHYSICAL_ONLY para reduzir os requisitos de recursos.

P: Como posso identificar qual tabela está corrompida na saída do CHECKDB?

A: Procure por números de “ID do objeto” em mensagens de erro e use: SELECT OBJECT_NAME(object_id) para encontrar nomes de tabelas. As mensagens de erro também incluem números de página e slot para identificação precisa da localização.

P: Problemas de hardware podem fazer com que o CHECKDB relate falsos positivos?

A: Sim, falhas de hardware (especialmente de armazenamento) podem causar corrupção intermitente que aparece e desaparece entre as execuções do CHECKDB. Se os erros forem inconsistentes, investigue seu subsistema de E/S e execute várias verificações para confirmar padrões.

10.6 Perguntas de configuração avançada

P: Quais sinalizadores de rastreamento podem melhorar o desempenho do CHECKDB?

A: O sinalizador de rastreamento 2562 pode melhorar o desempenho executando o CHECKDB como um único lote. O sinalizador de rastreamento 2549 ajuda quando os arquivos do banco de dados estão em discos separados. Use-os com cuidado e teste primeiro em ambientes que não estejam em produção.

P: Como automatizo o monitoramento e o alerta do CHECKDB?

A: Use SQL Server O agente emite alertas para os erros 8930, 8939 e outros. Implemente a análise de logs para extrair os resultados do CHECKDB e crie notificações para quaisquer descobertas de corrupção. Considere usar frameworks de solução de manutenção, como os scripts de Ola Hallengren.

P: Devo usar a opção EXTENDED_LOGICAL_CHECKS?

A: Somente se você suspeitar de corrupção lógica complexa e tiver sobrecarga de desempenho adequada. Esta opção realiza verificações adicionais em visualizações indexadas, índices XML e índices espaciais, mas aumenta significativamente o tempo de execução.

11. Conclusão

11.1 Resumo dos Pontos Chave

11.1.1 Recapitulação dos comandos essenciais do DBCC CHECKDB

Domine a sintaxe básica do DBCC CHECKDB para verificação abrangente do banco de dados, utilize as opções NOINDEX e PHYSICAL_ONLY para otimização de desempenho e entenda CHECKTABLE para tarVerificação de tabela obtida. Esses comandos fundamentais formam a base da manutenção proativa do banco de dados, permitindo a detecção precoce de corrupções e o monitoramento sistemático da integridade.

11.1.2 Lembrete de Melhores Práticas Críticas

Mantenha sempre backups atualizados antes de executar verificações de integridade, agende operações CHECKDB regulares com base na criticidade do banco de dados e implemente monitoramento automatizado para alertas imediatos de corrupção. Lembre-se de que a prevenção por meio de monitoramento regular supera abordagens reativas, e soluções profissionais de recuperação oferecem opções valiosas de backup quando as ferramentas padrão se mostram insuficientes.

11.2 Quando usar DBCC CHECKDB vs. Soluções avançadas

Utilize o DBCC CHECKDB para monitoramento de integridade de rotina e resolução de pequenas corrupções, reservando ferramentas profissionais de recuperação para cenários de corrupção grave, além dos recursos de reparo integrados. A estrutura de decisão deve considerar a disponibilidade do backup, a criticidade dos dados, as restrições de tempo e a gravidade da corrupção. Administradores de banco de dados bem-sucedidos combinam o monitoramento regular do CHECKDB com estratégias abrangentes de backup e conhecimento de opções avançadas de recuperação quando as abordagens padrão se mostram inadequadas.

12. Referências

  1. Microsoft Learn. “DBCC CHECKDB (Transact-SQL).” SQL Server Documentação. Microsoft Corporation.
    https://learn.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-checkdb-transact-sql?view=sql-server-ver17
  2. Microsoft Learn. “Solucionar erros de consistência de banco de dados relatados pelo DBCC CHECKDB.” SQL Server Documentação. Microsoft Corporation.
    https://learn.microsoft.com/en-us/troubleshoot/sql/database-engine/database-file-operations/troubleshoot-dbcc-checkdb-errors
Compartilhe agora: