Sintomas
Tenha em conta o seguinte cenário:
- Você tem duas tabelas particionadas no Microsoft SQL Server 2014, e as partições da primeira tabela são mapeadas para arquivos e grupos de arquivos diferentes usando o mesmo esquema de partição e função.
- Uma dessas partições é trocada para a segunda tabela e, em seguida, truncar a segunda tabela.
- Você solta arquivos e grupos de arquivos mapeados para a partição comutada.
- Executa uma instrução SELECT na segunda tabela.
Nesse cenário, você recebe a seguinte mensagem de erro:
Nota
Msg 606, Nível 21, Estado 1
Inconsistência de metadados. ID< do grupo de ficheiros,o ID> do grupo de ficheiros especificado para o nome> da < tabela não existe. Execute DBCC, CHECKDB ou CHECKCATALOG.
Quando executa DBCC CHECKDB/CHECKTABLE, recebe a seguinte mensagem de erro:
Nota
Não é possível processar o índice <IndexName> da tabela <TableName> porque o grupo de ficheiros (ID <do Grupo de Ficheiros, FileGroupNumber>) é inválido.
Resolução
O problema foi corrigido primeiro nas seguintes atualizações cumulativas do SQL Server:
Recomendação: Instale a atualização cumulativa mais recente para o SQL Server
Cada nova atualização cumulativa para SQL Server contém todos os hotfixes e todas as correções de segurança que foram incluídas com a atualização cumulativa anterior. Recomendamos que transfira e instale as atualizações cumulativas mais recentes para SQL Server:
Nota Esta correção apenas impede ocorrências futuras deste problema. Se já estiver a ter este problema, exporte os seus dados para uma base de dados nova sem danos nos metadados existentes. Para fazê-lo, siga estes passos:
Para determinar se uma partição tem um grupo de ficheiros inválido, execute a consulta seguinte para ver se devolve um resultado:
SELECT * FROM sys.allocation_units AS au WHERE au.data_space_id NOT IN (SELECT data_space_id FROM sys.filegroups)Torne a tabela com os metadados danificados visualizável novamente.
Se a consulta do passo 1 devolver um resultado, a partição com metadados danificados está a impedi-lo de ver (selecionar * de) quaisquer linhas na tabela. Para contornar esse problema, remova essa partição incorreta.
Observação A partição incorreta deve estar vazia. Caso contrário, os arquivos e o grupo de arquivos em que ele estava não poderiam ter sido descartados ou excluídos.
Para fazer isso, mova essa partição para outra tabela que use o mesmo esquema de particionamento. Esta tabela pode ser apenas uma tabela fictícia. Utilize o container_id da consulta no passo 1 e corresponda-o com o partition_id de sys.partitions. (Certifique-se de que toma nota da partition_number.) Use o partition_number para executar uma PARTIÇÃO ALTER TABLE SWITCH da tabela que não era visível para a tabela fictícia. A tabela fictícia deve ter o mesmo conjunto de colunas e usar o mesmo esquema de partição. A sua consulta para localizar a partição inconsistente poderá ter um aspeto semelhante ao seguinte:
SELECT au.container_id, au.data_space_id, p.partition_number FROM sys.partitions AS p JOIN sys.allocation_units AS au ON p.partition_id = au.container_id LEFT JOIN sys.filegroups AS fgs ON fgs.data_space_id = au.data_space_id WHERE object_id = OBJECT_ID('MyTableName') AND fgs.data_space_id IS NULL;Copie os dados da tabela anteriormente não visível para a nova base de dados.
Estado
A Microsoft confirmou que se trata de um problema nos produtos Microsoft listados na secção "Aplica-se a".