DBCC CHECKALLOC (Transact-SQL)
Verifica a consistência de estruturas de alocação de espaço em disco para um banco de dados especificado.
Convenções da sintaxe Transact-SQL
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_name | database_id | 0
É o nome ou a ID do banco de dados para o qual será feita a verificação de alocação e de uso de páginas. Se não for especificado ou se 0 for especificado, o banco de dados atual será usado.Os nomes de banco de dados devem seguir as regras para identificadores.
NOINDEX
Especifica que os índices não clusterizados para tabelas de usuário não devem ser verificados.Observação NOINDEX é mantido somente para compatibilidade com versões anteriores e não afeta DBCC CHECKALLOC.
REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD
Especifica que DBCC CHECKALLOC repara os erros encontrados. database_name deve estar em modo de usuário único.REPAIR_ALLOW_DATA_LOSS
Tenta reparar qualquer erro encontrado. Esses reparos podem provocar alguma perda de dados. REPAIR_ALLOW_DATA_LOSS é a única opção que permite que erros de alocação sejam reparados.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 Use as opções REPAIR apenas como um último recurso. Para reparar erros, recomendamos restaurar de um backup. Operações de reparo não consideram nenhuma das restrições que podem existir em tabelas ou entre tabelas. Se a tabela especificada estiver envolvida em uma ou mais restrições, recomendamos executar DBCC CHECKCONSTRAINTS após uma operação de reparo. Se for necessário usar REPAIR, execute DBCC CHECKDB sem uma opção de reparo para localizar o nível de reparo a ser usado. Se você usar o nível de REPAIR_ALLOW_DATA_LOSS, recomendamos fazer backup do banco de dados antes de executar DBCC CHECKDB com essa opção.
WITH
Permite que 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 têm nenhum efeito.NO_INFOMSGS
Suprime todas as mensagens informativas e o relatório de espaço utilizado.TABLOCK
Faz o comando DBCC obter um bloqueio de banco de dados exclusivo.ESTIMATE ONLY
Exibe a quantidade estimada de espaço em 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 do tipo de objeto ao qual elas pertencem. Isso também valida as diversas estruturas internas usadas para manter o controle dessas páginas e das relações entre elas.
Se NO_INFOMSGS não for especificado, DBCC CHECKALLOC coletará informações sobre uso de espaço para todos os objetos no banco de dados. Essas informações serão então impressas junto com todos os erros localizados.
Observação |
---|
A funcionalidade DBCC CHECKALLOC está incluída em DBCC CHECKDB e DBCC CHECKFILEGROUP. Isso significa que não é preciso executar DBCC CHECKALLOC separadamente dessas instruções. |
Observação |
---|
DBCC CHECKALLOC não verifica dados FILESTREAM. FILESTREAM armazena BLOBS (objetos binários grandes) no sistema de arquivos. |
Instantâneo de banco de dados interno
DBCC CHECKALLOC usa um instantâneo de banco de dados interno para fornecer a consistência transacional necessária ao executar essas verificações. Se não for possível criar um instantâneo ou se TABLOCK for especificado, DBCC CHECKALLOC tentará adquirir um bloqueio exclusivo (X) no banco de dados para obter a consistência necessária.
Observação |
---|
No SQL Server 2005 e posteriores, a execução de DBCC CHECKALLOC em tempdb não executa nenhuma verificação. Isso porque, por motivos de desempenho, os instantâneos de banco de dados não estão disponíveis no tempdb. Isso significa que não é possível obter a consistência transacional exigida. Interrompa e inicie o serviço MSSQLSERVER para resolver qualquer problema de alocação de tempdb. Essa ação remove e recria o banco de dados tempdb. |
Compreendendo mensagens de erro DBCC
Depois que o comando DBCC CHECKALLOC é encerrado, 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 o tempo de execução do comando. Se o comando DBCC parar antes de concluir a verificação por causa de um erro, a mensagem indicará que o comando foi finalizado, um valor de estado e o tempo de execução do comando. 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 um dano de metadados que provocou a finalização do comando DBCC. |
1 |
Erro número 8967 foi gerado. Ocorreu um erro do DBCC interno. |
2 |
Ocorreu uma falha durante o reparo do banco de dados em modo de emergência. |
3 |
Isso indica um dano de metadados que provocou a finalização do comando DBCC. |
4 |
Uma declaração ou violação de acesso foi detectada. |
5 |
Ocorreu um erro desconhecido que finalizou o comando DBCC. |
Relatório de erros
Um miniarquivo de despejo (SQLDUMPnnnn.txt) é criado no diretório LOG do SQL Server sempre que DBCC CHECKALLOC detecta um erro de dano. Quando os recursos de coleta de dados Uso de Recursos e Relatório de Erros são habilitados para a instância do SQL Server, o arquivo é encaminhado automaticamente à Microsoft. Os dados coletados são usados para aprimorar a funcionalidade do SQL Server.
O arquivo de despejo contém os resultados do comando DBCC CHECKALLOC e saídas de diagnóstico adicionais. O arquivo tem DACLs (listas de controle de acesso discricionário) 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 de administradores locais. O comando DBCC não falhará se o processo de coleta de dados falhar.
Resolvendo erros
Se qualquer erro for relatado pelo DBCC CHECKALLOC, é recomendável restaurar o banco de dados do backup em vez de executar um reparo. Se não existir um backup, executar um reparo pode corrigir os erros relatados, entretanto, a correção dos erros pode exigir que algumas páginas e, portanto, dados sejam excluídos.
Um reparo pode ser executado em uma transação de usuário. Isso permite que alterações sejam revertidas. Se as alterações forem revertidas, o banco de dados ainda conterá erros e deverá ser restaurado de um backup. Depois que os reparos forem concluídos, faça backup do banco de dados.
Conjuntos de resultados
As tabelas a seguir descrevem as informações retornadas por DBCC CHECKALLOC.
Item |
Descrição |
---|---|
FirstIAM |
Somente para uso interno. |
Root |
Somente para uso interno. |
Dpages |
Contagem de páginas de dados. |
Pages used |
Páginas alocadas. |
Dedicated extents |
Extensões alocadas ao objeto. Se forem usadas páginas de alocação mistas, 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. Esse resumo descreve a distribuição dos dados.
Item |
Descrição |
---|---|
Reserved pages |
As páginas alocadas para o índice e as páginas não usadas em extensões alocadas. |
Used pages |
Páginas alocadas e usadas pelo índice. |
Partition ID |
Somente para uso interno. |
Alloc unit ID |
Somente para uso interno. |
In-row data |
As páginas contêm dados de índice ou de heap. |
LOB data |
As páginas contêm dados varchar(max), nvarchar(max), varbinary(max), text, ntext, xml e image. |
Row-overflow data |
As páginas contêm dados de coluna do comprimento de variável que foram enviados por push para fora da linha. |
DBCC CHECKALLOC retorna o conjunto de resultados a seguir (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 conjunto de resultados a seguir.
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
Exige associação na função de servidor fixa sysadmin ou na função de banco de dados fixa db_owner.
Exemplos
O exemplo a seguir executa DBCC CHECKALLOC para o banco de dados atual e o banco de dados AdventureWorks.
-- Check the current database.
DBCC CHECKALLOC;
GO
-- Check the AdventureWorks2012 database.
DBCC CHECKALLOC (AdventureWorks2012);
GO