KB3095958 – Oprava: Chyba inkonzistence metadat po přechodu na oddíly tabulky a uvolnění odpovídajících souborů a skupin souborů

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:

  1. 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)
  2. 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;
  3. 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.

Potřebujete další pomoc?

Rozšiřte své znalosti a dovednosti
Projít školení
Získejte nové funkce jako první
Připojit se k programu Microsoft Insider

Byly tyto informace užitečné?

Děkujeme za váš názor!

×