Sintomi
Considerare lo scenario descritto di seguito:
-
Sono disponibili due tabelle partizionate in Microsoft SQL Server 2014 e le partizioni della prima tabella sono mappate a file e gruppi di dati diversi usando lo stesso schema di partizione e la stessa funzione.
-
Si passa una di queste partizioni alla seconda tabella e si tronca la seconda tabella.
-
Si eliminano file e gruppi di dati mappati alla partizione commutata.
-
Si esegue un'istruzione SELECT nella seconda tabella.
In questo scenario viene visualizzato il messaggio di errore seguente:
Msg 606, livello 21, stato 1Metadata incoerenza. ID filegroup<ID filegroup> specificato per la tabella <nome tabella> non esiste. Eseguire DBCC CHECKDB o CHECKCATALOG.
Quando si esegue DBCC CHECKDB/CHECKTABLE, viene visualizzato il messaggio di errore seguente:
Non è possibile elaborare l'indice <indexname> della tabella <TableName> poiché il filegroup (ID filegroup <FileGroupNumber>) non è valido.
Risoluzione
Il problema è stato risolto per la prima volta nei seguenti aggiornamenti cumulativi di SQL Server:
Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutti gli hotfix e tutti gli aggiornamenti della sicurezza inclusi nell'aggiornamento cumulativo precedente. È consigliabile scaricare e installare gli aggiornamenti cumulativi più recenti per SQL Server:
Nota Questa correzione impedisce solo le occorrenze future del problema. Se si sta già verificando questo problema, esportare i dati in un nuovo database senza danneggiare i metadati esistenti. A tal fine, attenersi alla seguente procedura:
-
Per determinare se una partizione ha un filegroup non valido, eseguire la query seguente per verificare se restituisce un risultato:
SELECT * FROM sys.allocation_units AS au WHERE au.data_space_id NOT IN (SELECT data_space_id FROM sys.filegroups)
-
Rendere di nuovo visibile la tabella con il danneggiamento dei metadati. Se la query del passaggio 1 restituisce un risultato, la partizione con metadati danneggiati impedisce la visualizzazione (selezionare * da) tutte le righe della tabella. Per risolvere il problema, rimuovere la partizione errata.Nota La partizione non valida deve essere vuota. In caso contrario, i file e il filegroup in cui si trovavano non potevano essere rimossi o eliminati. A questo scopo, Trasferisci la partizione in un'altra tabella che usa lo stesso schema di partizionamento. Questa tabella può essere solo una tabella fittizia. Usare la container_id della query nel passaggio 1 e confrontarla con il partition_id da sys. partizioni. Verificare che sia nota la partition_number. Usare la partition_number per eseguire una partizione di cambio tabella ALTERAta dalla tabella che non è possibile visualizzare nella tabella fittizia. La tabella fittizia dovrebbe avere lo stesso set di colonne e usare lo stesso schema di partizione. La query per trovare la partizione incoerente può essere simile alla seguente:
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;
-
Copiare i dati dalla tabella precedente non visualizzabile nel nuovo database.
Stato
Microsoft ha confermato che questo problema si verifica nei prodotti elencati nella sezione "Si applica a".