Příznaky
Zvažte následující scénář:
-
Máte dvě tabulky s oddíly v Microsoft SQL serveru 2014 a oddíly první tabulky jsou namapované na různé soubory a skupiny souborů pomocí stejného schématu a funkcí.
-
Jeden z těchto oddílů můžete přepnout do druhé tabulky a potom můžete zkrátit druhou tabulku.
-
Přepnuli jste soubory a skupiny, které jsou namapované na přepínané oddíly.
-
Spustíte příkaz SELECT ve druhé tabulce.
V tomto scénáři se zobrazí následující chybová zpráva:
Msg 606, úroveň 21, stav nekonzistence stavu 1Metadata ID souborové<> zadaná pro tabulku <název tabulky> neexistuje. Spusťte příkaz DBCC CHECKDB nebo CHECKCATALOG.
Když spustíte příkaz DBCC CHECKDB/CHECKTABLE, zobrazí se následující chybová zpráva:
Nelze zpracovat index <index> tabulky <TableName>, protože soubor. (ID instance souboru <FileGroupNumber>) je neplatný.
Řešení
Tento problém byl poprvé opraven v následujících kumulativních aktualizacích SQL serveru:
Každá nová kumulativní aktualizace pro SQL Server obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí kumulativní aktualizace. Doporučujeme stáhnout a nainstalovat nejnovější kumulativní aktualizace pro SQL Server:
Poznámka Tato oprava zabrání pouze budoucím výskytům tohoto problému. Pokud už máte tento problém, exportujte data do nové databáze bez poškození metadat. Postupujte takto:
-
Pokud chcete zjistit, jestli má oddíl neplatnou skupině souborů, spusťte tento dotaz, jestli vrátí výsledek:
SELECT * FROM sys.allocation_units AS au WHERE au.data_space_id NOT IN (SELECT data_space_id FROM sys.filegroups)
-
Vytvořte znovu tabulku s poškozenými metadaty. Pokud dotaz z kroku 1 vrátí výsledek, oddíl s poškozenými metadaty vám brání zobrazit (vyberte * z) všechny řádky v tabulce. Tento problém můžete vyřešit tak, že tento špatný oddíl odeberete.Poznámka Chybný oddíl by měl být prázdný. V opačném případě se soubory a ve skupině souborů, ve kterých se nachází, nebyly vyřazeny nebo odstraněny. Chcete-li to udělat, přesuňte tento oddíl do jiné tabulky, která používá stejné schéma rozdělování. Tato tabulka může být jenom fiktivní tabulka. Použijte container_id z dotazu v kroku 1 a pořiďte ho pomocí partition_id z sys. partitions. (Nezapomeňte partition_number.) Pomocí partition_number provedete příkaz ALTER TABLE SWITCH z tabulky, která se nedá zobrazit, do fiktivní tabulky. Fiktivní tabulka by měla mít stejnou sadu sloupců a používat stejné schéma oddílu. Dotaz pro nalezení nekonzistentního oddílu se můžou podobat následujícímu:
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;
-
Zkopírujte data z dříve neuvedené tabulky do nové databáze.
Stav
Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.