DBCC CHECKFILEGROUP (Transact-SQL)
Verifica a alocação e a integridade estrutural de todas as tabelas e exibições indexadas no grupo de arquivos especificado do banco de dados atual.
Convenções da sintaxe Transact-SQL
Sintaxe
DBCC CHECKFILEGROUP
[
[ ( { filegroup_name | filegroup_id | 0 }
[ , NOINDEX ]
) ]
[ WITH
{
[ ALL_ERRORMSGS | NO_INFOMSGS ]
[ , TABLOCK ]
[ , ESTIMATEONLY ]
[ , PHYSICAL_ONLY ]
}
]
]
Argumentos
filegroup_name
É o nome do grupo de arquivos no banco de dados atual para o qual a alocação e integridade estrutural de tabela devem ser verificadas. Se não for especificado, ou se 0 for especificado, o padrão será o grupo de arquivos primário. Os nomes de grupos de arquivos devem estar de acordo com as regras para identificadores.filegroup_name não pode ser um grupo de arquivos FILESTREAM.
filegroup_id
É a ID (número de identificação) do grupo de arquivos no banco de dados atual para o qual a alocação e a integridade estrutural da tabela devem ser verificadas.NOINDEX
Especifica que não devem ser executadas verificações intensivas de índices não clusterizados de tabelas de usuário. Isto reduz o tempo de execução geral. NOINDEX não afeta tabelas do sistema porque DBCC CHECKFILEGROUP sempre verifica todos os índices de tabela de sistema.ALL_ERRORMSGS
Exibe um número ilimitado de erros por objeto. 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.TABLOCK
Faz com que DBCC CHECKFILEGROUP obtenha bloqueios em vez de usar um instantâneo do banco de dados interno.ESTIMATE ONLY
Exibe a quantidade estimada de espaço do tempdb necessária para executar DBCC CHECKFILEGROUP com todas as outras opções especificadas.PHYSICAL_ONLY
Limita a verificação à integridade da estrutura física da página, dos cabeçalhos de registros e da estrutura física de árvores B. Criada para fornecer uma pequena verificação de sobrecarga da consistência física do grupo de arquivos, essa verificação também pode detectar páginas fragmentadas e falhas comuns de hardware que podem comprometer os dados. Uma execução completa de DBCC CHECKFILEGROUP pode demorar muito mais em versões anteriores. Esse comportamento ocorre devido às seguintes razões:As verificações lógicas são mais abrangentes.
Algumas das estruturas subjacentes a serem verificadas são mais complexas.
Foram introduzidas muitas verificações novas para incluir os novos recursos.
Portanto, o uso da opção PHYSICAL_ONLY pode provocar um tempo de execução muito mais curto para DBCC CHECKFILEGROUP em grupos de arquivos grandes e, portanto, é recomendado para uso frequente em sistemas de produção. É recomendável ainda uma execução completa de DBCC CHECKFILEGROUP periodicamente. A frequência dessas execuções depende de fatores específicos aos negócios e ambientes de produção individuais. PHYSICAL_ONLY sempre implica em NO_INFOMSGS e não é permitido com nenhuma das opções de reparo.
Observação A especificação de PHYSICAL_ONLY faz com que DBCC CHECKFILEGROUP ignore todas as verificações de dados FILESTREAM.
Comentários
DBCC CHECKFILEGROUP e DBCC CHECKDB são comandos DBCC semelhantes. A principal diferença é que DBCC CHECKFILEGROUP é limitado ao único grupo de arquivos especificado e às tabelas necessárias.
DBCC CHECKFILEGROUP executa os seguintes comandos:
DBCC CHECKALLOC do grupo de arquivos.
DBCC CHECKTABLE de toda tabela e exibição indexada no grupo de arquivos.
A execução de DBCC CHECKALLOC ou de DBCC CHECKTABLE separadamente de DBCC CHECKFILEGROUP não é necessária.
Instantâneo do banco de dados interno
DBCC CHECKFILEGROUP usa um instantâneo do banco de dados interno para fornecer a consistência transacional necessária ao executar essas verificações. Para obter mais informações, consulte Exibir o tamanho do arquivo esparso de um instantâneo de banco de dados (Transact-SQL) e a seção "Uso de instantâneo de banco de dados interno DBCC" em DBCC (Transact-SQL).
Se um instantâneo não puder ser criado, ou se a opção TABLOCK for especificada, DBCC CHECKFILEGROUP irá adquirir bloqueios para obter a consistência necessária. Nesse caso, um bloqueio de banco de dados exclusivo é necessário para executar as verificações de alocação, e bloqueios de tabela compartilhados são necessários para executar as verificações de tabela. TABLOCK faz com que DBCC CHECKFILEGROUP seja executado com mais rapidez em um banco de dados sob carga pesada, mas reduz a simultaneidade disponível no banco de dados durante sua execução.
Observação |
---|
A execução de DBCC CHECKFILEGROUP em relação a tempdb não executa nenhuma verificação de alocação e deve adquirir bloqueios de tabela compartilhados para executar verificações de tabela. Isso porque, por razões de desempenho, instantâneos de banco de dados não estão disponíveis no tempdb. Isso significa que a consistência transacional exigida não pode ser obtida. |
Verificando objetos em paralelo
Por padrão, DBCC CHECKFILEGROUP executa a verificação paralela de objetos. O grau de paralelismo é automaticamente determinado pelo processador de consulta. O grau de máximo de paralelismo é configurado da mesma forma que as consultas paralelas. Para restringir o número de máximo de processadores disponíveis para a verificação DBCC, use sp_configure. Para obter mais informações, consulte Configurar a opção de configuração de servidor max degree of parallelism.
A verificação paralela pode ser desabilitada usando o sinalizador de rastreamento 2528. Para obter mais informações, consulte Sinalizadores de rastreamento (Transact-SQL).
Índices não clusterizados em grupos de arquivos separados
Se um índice não clusterizado no grupo de arquivos especificado estiver associado a uma tabela em outro grupo de arquivos, o índice não é verificado porque a tabela base não está disponível para validação. Essa é uma alteração no comportamento do SQL Server 2005. Em versões anteriores do SQL Server, o índice não clusterizado e a tabela base no outro grupo de arquivos são verificados. Para verificar os índices não clusterizados e as tabelas base, execute DBCC CHECKDB.
Se uma tabela no grupo de arquivos especificado tiver um índice não clusterizado em outro grupo de arquivos, o índice não clusterizado não será verificado por causa do seguinte:
A estrutura da tabela base não é dependente da estrutura de um índice não clusterizado. Os índices não clusterizados não precisam ser examinados para validar a tabela base.
O comando DBCC CHECKFILEGROUP valida objetos somente no grupo de arquivos especificado.
Um índice clusterizado e uma tabela não podem estar em grupos de arquivos diferentes; portanto as considerações anteriores se aplicam somente a índices não clusterizados.
Tabelas particionadas em grupos de arquivos separados
Em versões de SQL Server 2005 anteriores ao Service Pack 2 (SP2), o DBCC CHECKFILEGROUP verifica somente uma tabela particionada se a tabela inteira estiver no grupo de arquivos especificado. Se a tabela for espalhada em vários grupos de arquivos, a tabela inteira será ignorada. No SP2 e superior, quando uma tabela particionada existe em vários grupos de arquivos, o DBCC CHECKFILEGROUP verifica os conjuntos de linhas de partição que existem no grupo de arquivos especificado e ignora os conjuntos de linhas nos outros grupos de arquivos. A mensagem informativa 2594 indica as partições que não foram verificadas. Índices não clusterizados não residentes no grupo de arquivos especificado não são verificados.
Compreendendo mensagens de erro DBCC
Depois que o comando DBCC CHECKFILEGROUP é concluído, 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 CHECKFILEGROUP detecta um erro de corrupção. Quando os recursos de coleta de dados Uso de Recursos e Relatório de Erro são habilitados para a instância do SQL Server, o arquivo é automaticamente encaminhado à 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 CHECKFILEGROUP 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 informado por DBCC CHECKFILEGROUP, recomendamos a restauração do banco de dados com o backup de banco de dados. Observe que as opções de reparo não podem ser especificadas para DBCC CHECKFILEGROUP.
Se nenhum backup existir, a execução de DBCC CHECKDB com uma opção de reparo especificada corrige os erros relatados. A opção de reparo a ser usada será especificada no fim da lista se erros forem relatados. A correção de erros usando a opção REPAIR_ALLOW_DATA_LOSS pode exigir que algumas páginas e, portanto, dados, sejam excluídos.
Conjuntos de resultados
DBCC CHECKFILEGROUP retorna o seguinte conjunto de resultados (os valores podem variar):
Exceto quando ESTIMATEONLY ou NO_INFOMSGS é especificado.
Para o banco de dados atual, se nenhum banco de dados estiver especificado, se todas as opções estiverem especificadas ou não (exceto NOINDEX).
DBCC results for 'master'.
DBCC results for 'sys.sysrowsetcolumns'.
There are 630 rows in 7 pages for object 'sys.sysrowsetcolumns'.
DBCC results for 'sys.sysrowsets'.
There are 97 rows in 1 pages for object 'sys.sysrowsets'.
DBCC results for 'sysallocunits'.
There are 195 rows in 3 pages for object 'sysallocunits'.
There are 2340 rows in 16 pages for object 'spt_values'.
DBCC results for 'MSreplication_options'.
There are 2 rows in 1 pages for object 'MSreplication_options'.
CHECKFILEGROUP found 0 allocation errors and 0 consistency errors in database 'master'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Se NO_INFOMSGS estiver especificado, DBCC CHECKFILEGROUP retornará:
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Se ESTIMATEONLY estiver especificado, DBCC CHECKFILEGROUP retornará (os valores podem variar):
Estimated TEMPDB space needed for CHECKALLOC (KB)
-------------------------------------------------
15
(1 row(s) affected)
Estimated TEMPDB space needed for CHECKTABLES (KB)
--------------------------------------------------
207
(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
A.Verificando o grupo de arquivos PRIMARY no banco de dados AdventureWorks
O exemplo a seguir verifica o grupo de arquivos primário do banco de dados do AdventureWorks.
USE AdventureWorks2012;
GO
DBCC CHECKFILEGROUP;
GO
B.Verificando o grupo de arquivos PRIMARY de AdventureWorks sem índices não clusterizados
O exemplo a seguir verifica o grupo de arquivos primário do banco de dados de AdventureWorks (excluindo índices não clusterizados) especificando o número de identificação do grupo de arquivos primário e NOINDEX.
USE AdventureWorks2012;
GO
DBCC CHECKFILEGROUP (1, NOINDEX);
GO
C.Verificando o grupo de arquivos PRIMARY com opções
O exemplo a seguir verifica o grupo de arquivos primário do banco de dados master e especifica a opção ESTIMATEONLY.
USE master;
GO
DBCC CHECKFILEGROUP (1)
WITH ESTIMATEONLY;
Consulte também
Referência
sp_helpfilegroup (Transact-SQL)
sys.sysfilegroups (Transact-SQL)