Partilhar via


DBCC CHECKALLOC (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azure

Verifica a consistência das estruturas de alocação de espaço em disco para um banco de dados especificado.

Transact-SQL convenções de sintaxe

Sintaxe

DBCC CHECKALLOC
[
    ( database_name | database_id | 0
      [ , NOINDEX
      | , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ]
    )
    [ WITH
        {
          [ ALL_ERRORMSGS ]
          [ , NO_INFOMSGS ]
          [ , TABLOCK ]
          [ , ESTIMATEONLY ]
        }
    ]
]

Argumentos

| database_namedatabase_id | 0

O nome ou a ID do banco de dados para o qual verificar a alocação e o uso da página.

Se não for especificado, ou se 0 for especificado, o banco de dados atual será usado.

Os nomes dos bancos de dados devem seguir as regras para identificadores.

NOÍNDICE

Especifica que os índices não clusterizados para tabelas de usuário não devem ser verificados.

NOINDEX é mantido apenas para compatibilidade com versões anteriores e não afeta DBCC CHECKALLOC.

REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD

Especifica que DBCC CHECKALLOC reparar os erros encontrados. database_name deve estar no modo de usuário único.

  • REPAIR_ALLOW_DATA_LOSS

    Tenta reparar quaisquer erros encontrados. Esses reparos podem causar alguma perda de dados. REPAIR_ALLOW_DATA_LOSS é a única opção que permite reparar erros de atribuição.

  • REPAIR_FAST

    A sintaxe é mantida apenas para compatibilidade com versões anteriores. Nenhuma ação de reparo é executada.

  • REPAIR_REBUILD

    Não aplicável.

Importante

Utilize as opções de REPARAÇÃO apenas como último recurso. Para reparar erros, recomendamos restaurar a partir de uma cópia de segurança. As operações de reparo não consideram nenhuma das restrições que possam existir nas tabelas ou entre elas. Se a tabela especificada estiver envolvida em uma ou mais restrições, recomendamos executáDBCC CHECKCONSTRAINTS após uma operação de reparo. Se tiver de utilizar REPAIR, execute DBCC CHECKDB sem uma opção de reparação para encontrar o nível de reparação a utilizar. Se você usar o nível de REPAIR_ALLOW_DATA_LOSS, recomendamos que faça backup do banco de dados antes de executar DBCC CHECKDB com essa opção.

COM

Permite que as opções sejam especificadas.

  • ALL_ERRORMSGS

    Exibe todas as mensagens de erro. Todas as mensagens de erro são exibidas por padrão. Especificar ou omitir esta opção não tem efeito.

  • NO_INFOMSGS

    Suprime todas as mensagens informativas e o relatório de espaço utilizado.

  • TABLOCK

    Faz com que o comando DBCC obtenha um bloqueio de banco de dados exclusivo.

  • ESTIMATIVAAPENAS

    Exibe a quantidade estimada de espaço de tempdb necessário para executar DBCC CHECKALLOC quando todas as outras opções são especificadas.

Comentários

DBCC CHECKALLOC verifica a alocação de todas as páginas no banco de dados, independentemente do tipo de página ou tipo de objeto ao qual elas pertencem. Ele também valida as várias estruturas internas que são usadas para manter o controle dessas páginas e as relações entre elas.

Se NO_INFOMSGS não for especificado, DBCC CHECKALLOC coletará informações de uso de espaço para todos os objetos no banco de dados. Esta informação é impressa juntamente com quaisquer erros encontrados.

Observação

A funcionalidade DBCC CHECKALLOC está incluída no DBCC CHECKDB e DBCC CHECKFILEGROUP. Isso significa que você não precisa executar DBCC CHECKALLOC separadamente dessas instruções. DBCC CHECKALLOC não verifica os dados FILESTREAM. FILESTREAM armazena objetos binários grandes (BLOBS) no sistema de arquivos.

Instantâneo do banco de dados interno

DBCC CHECKALLOC usa um instantâneo de banco de dados interno para fornecer a consistência transacional necessária para executar essas verificações. Se não for possível criar um instantâneo ou TABLOCK for especificado, DBCC CHECKALLOC tentará adquirir um bloqueio exclusivo (X) no banco de dados para obter a consistência necessária.

Observação

Executar DBCC CHECKALLOC contra tempdb não executa nenhuma verificação. Isso ocorre porque, por motivos de desempenho, os instantâneos do banco de dados não estão disponíveis no tempdb. Isso significa que a consistência transacional necessária não pode ser obtida. Pare e inicie o Mecanismo de Banco de Dados para resolver quaisquer problemas de alocação de tempdb. Essa ação descarta e recria o banco de dados tempdb.

Compreender as mensagens de erro DBCC

Após a conclusão do comando DBCC CHECKALLOC, uma mensagem é gravada no log de erros do SQL Server. Se o comando DBCC for executado com êxito, a mensagem indicará uma conclusão bem-sucedida e a quantidade de tempo que o comando foi executado. Se o comando DBCC parar antes de concluir a verificação devido a um erro, a mensagem indica que o comando foi encerrado, um valor de estado e a quantidade de tempo que o comando executou. A tabela a seguir lista e descreve os valores de estado que podem ser incluídos na mensagem.

Estado Descrição
0 O erro número 8930 foi gerado. Isso indica uma corrupção de metadados que causou o encerramento do comando DBCC.
1 O erro número 8967 foi gerado. 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 de metadados que causou o encerramento do comando DBCC.
4 Foi detetada uma violação de afirmação ou acesso.
5 Ocorreu um erro desconhecido que encerrou o comando DBCC.

Relatório de erros

Um arquivo de minidespejo (SQLDUMP<nnnn>.txt) é criado no diretório do SQL Server LOG sempre que DBCC CHECKALLOC deteta um erro de corrupção. Quando os recursos de coleta de dados de Uso de Recursos e Relatório de Erros são habilitados para a instância do SQL Server, o arquivo é encaminhado automaticamente para a Microsoft. Os dados coletados são usados para melhorar a funcionalidade do SQL Server.

O arquivo de despejo contém os resultados do comando DBCC CHECKALLOC e saída de diagnóstico adicional. O arquivo tem listas de controle de acesso discricionário (DACLs) restritas. O acesso é limitado à conta de serviço do SQL Server e aos membros da função sysadmin. Por padrão, a função sysadmin contém todos os membros do grupo BUILTIN\Administradores do Windows e do grupo do administrador local. O comando DBCC não falhará se o processo de coleta de dados falhar.

Resolver erros

Se DBCC CHECKALLOC relatar erros, recomendamos que você restaure o banco de dados a partir do backup do banco de dados em vez de executar um reparo. Se um backup não existir, a execução de um reparo pode corrigir os erros relatados; No entanto, a correção dos erros pode exigir que algumas páginas e, portanto, os dados, sejam excluídos.

Um reparo pode ser realizado em uma transação do usuário. Isso permite que as alterações sejam revertidas. Se as alterações forem revertidas, o banco de dados ainda conterá erros e deverá ser restaurado a partir de um backup. Após a conclusão dos reparos, faça backup do banco de dados.

Conjuntos de resultados

As tabelas a seguir descrevem as informações que DBCC CHECKALLOC retorna.

Número Descrição
FirstIAM Apenas para uso interno.
Root Apenas para uso interno.
Dpages Contagem de páginas de dados.
Páginas usadas Páginas alocadas.
Extensões dedicadas Extensões alocadas ao objeto.

Se forem usadas páginas de alocação mista, pode haver páginas alocadas sem extensões.

DBCC CHECKALLOC também relata um resumo de alocação para cada índice e partição em cada arquivo. Este resumo descreve a distribuição dos dados.

Número Descrição
Páginas reservadas Páginas alocadas ao índice e as páginas não utilizadas em extensões alocadas.
Páginas usadas Páginas alocadas e sendo usadas pelo índice.
ID da partição Apenas para uso interno.
ID da unidade Alloc Apenas para uso interno.
Dados em linha As páginas contêm dados de índice ou pilha.
Dados LOB As páginas contêm varchar(max), nvarchar(max), varbinary(max), texto, ntext, xml e dados de de imagem.
Dados de estouro de linha As páginas contêm dados de coluna de comprimento variável que foram empurrados para fora da linha.

DBCC CHECKALLOC retorna o seguinte conjunto de resultados (os valores podem variar), exceto quando ESTIMATEONLY ou NO_INFOMSGS é especificado.

DBCC results for 'master'.
***************************************************************
Table sysobjects                Object ID 1.
Index ID 1         FirstIAM (1:11)   Root (1:12)    Dpages 22.
    Index ID 1. 24 pages used in 5 dedicated extents.
Index ID 2         FirstIAM (1:1368)   Root (1:1362)    Dpages 10.
    Index ID 2. 12 pages used in 2 dedicated extents.
Index ID 3         FirstIAM (1:1392)   Root (1:1408)    Dpages 4.
    Index ID 3. 6 pages used in 0 dedicated extents.
Total number of extents is 7.
***************************************************************
'...'
***************************************************************
Table spt_server_info                Object ID 1938105945.
Index ID 1         FirstIAM (1:520)   Root (1:508)    Dpages 1.
    Index ID 1. 3 pages used in 0 dedicated extents.
Total number of extents is 0.
***************************************************************
Processed 52 entries in sysindexes for database ID 1.
File 1. Number of extents = 210, used pages = 1126, reserved pages = 1280.
           File 1 (number of mixed extents = 73, mixed pages = 184).
    Object ID 1, Index ID 0, data extents 5, pages 24, mixed extent pages 9.
'...'
    Object ID 1938105945, Index ID 0, data extents 0, pages 3, mixed extent pages 3.
Total number of extents = 210, used pages = 1126, reserved pages = 1280 in this database.
       (number of mixed extents = 73, mixed pages = 184) in this database.
CHECKALLOC found 0 allocation errors and 0 consistency errors in database 'master'.
DBCC results for 'master'.
***************************************************************
Table sys.sysrowsetcolumns                Object ID 4.
Index ID 1, partition ID 262144, alloc unit ID 262144 (type In-row data). FirstIAM (1:98). Root (1:94). Dpages 7.
Index ID 1, partition ID 262144, alloc unit ID 262144 (type In-row data). 9 pages used in 1 dedicated extents.
Index ID 1, partition ID 262144, alloc unit ID 262398 (type Row-overflow data). FirstIAM (0:0). Root (0:0). Dpages 0.
Index ID 1, partition ID 262144, alloc unit ID 262398 (type Row-overflow data). 0 pages used in 0 dedicated extents.
Total number of extents is 1.
...
***************************************************************
Processed 201 entries in system catalog for database ID 1.
File 1. Number of extents = 44, used pages = 300, reserved pages = 345.
           File 1 (number of mixed extents = 29, mixed pages = 225).
    Object ID 4, index ID 1, partition ID 262144, alloc unit ID 262144 (type In-row data), data extents 1, pages 9, mixed extent pages 8.
    Object ID 5, index ID 1, partition ID 327680, alloc unit ID 327680 (type In-row data), data extents 0, pages 2, mixed extent pages 2.
    Object ID 7, index ID 1, partition ID 458752, alloc unit ID 458752 (type In-row data), data extents 0, pages 5, mixed extent pages 5.
    Object ID 8, index ID 0, partition ID 524288, alloc unit ID 524288 (type In-row data), data extents 0, pages 2, mixed extent pages 2.
    Object ID 13, index ID 1, partition ID 851968, alloc unit ID 851968 (type In-row data), data extents 1, pages 9, mixed extent pages 8.
    Object ID 15, index ID 1, partition ID 983040, alloc unit ID 983040 (type In-row data), data extents 0, pages 2, mixed extent pages 2.
    Object ID 26, index ID 1, partition ID 281474978414592, alloc unit ID 1703937 (type In-row data), data extents 0, pages 3, mixed extent pages 3.
    Object ID 27, index ID 1, partition ID 281474978480128, alloc unit ID 1769473 (type In-row data), data extents 0, pages 3, mixed extent pages 3.
    Object ID 27, index ID 2, partition ID 562949955190784, alloc unit ID 1769474 (type In-row data), index extents 0, pages 3, mixed extent pages 3.
...
    Object ID 1179151246, index ID 1, partition ID 72057594038845440, alloc unit ID 13435136 (type In-row data), data extents 2, pages 18, mixed extent pages 8.
    Object ID 1179151246, index ID 2, partition ID 72057594038910976, alloc unit ID 13566208 (type In-row data), index extents 1, pages 16, mixed extent pages 8.
    Object ID 1911677858, index ID 0, partition ID 72057594039631872, alloc unit ID 15073536 (type In-row data), data extents 0, pages 2, mixed extent pages 2.
Total number of extents = 41, used pages = 289, reserved pages = 323 in this database.
       (number of mixed extents = 27, mixed pages = 211) in this database.
CHECKALLOC found 0 allocation errors and 0 consistency errors in database 'master'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Quando ESTIMATEONLY é especificado, DBCC CHECKALLOC retorna o seguinte conjunto de resultados.

Estimated TEMPDB space needed for CHECKALLOC (KB)
-------------------------------------------------
34
  
(1 row(s) affected)
  
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Permissões

Requer associação à função de servidor fixa sysadmin ou à função de banco de dados fixa db_owner.

Exemplos

O exemplo a seguir executa DBCC CHECKALLOC para o banco de dados atual e para o banco de dados AdventureWorks2025.

-- Check the current database.
DBCC CHECKALLOC;
GO
-- Check the AdventureWorks2022 database.
DBCC CHECKALLOC (AdventureWorks2022);
GO

Ver também