KB3095958 - REMEDIERE: Eroare de inconsistență în metadate după ce comutați între partițiile de tabel și eliminați fișierele și grupurile de fișiere corespunzătoare

Se aplică la
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

Simptome

Luați în considerare următorul scenariu:

  • Aveți două tabele partiționate în Microsoft SQL Server 2014, iar partițiile primului tabel sunt mapate la fișiere și grupuri de fișiere diferite, utilizând aceeași schemă de partiții și aceeași funcție.
  • Comutați una dintre aceste partiții la al doilea tabel, apoi trunchiați al doilea tabel.
  • Eliminați fișierele și grupurile de fișiere care sunt mapate la partiția comutată.
  • Rulați o instrucțiune SELECT pentru al doilea tabel.

În acest scenariu, primiți următorul mesaj de eroare:

Notă

Msg 606, Level 21, State 1
Inconsistența metadatelor. ID-ul< grupului de fișiere ID-ul >grupului de fișiere specificat pentru tabel < Numele >tabelului nu există. Rulați DBCC CHECKDB sau CHECKCATALOG.

Atunci când rulați DBCC CHECKDB/CHECKTABLE, primiți următorul mesaj de eroare:

Notă

Nu se poate procesa indexul<: IndexName> al tabelului<, deoarece > grupul de fișiere (ID <grup de fișiere, NumărFișierGrupFișier>) nu este valid.

Rezolvare

Problema a fost remediată mai întâi în următoarele actualizări cumulative ale SQL Server:

Recomandare: Instalați cea mai recentă actualizare cumulativă pentru SQL Server

Fiecare actualizare cumulativă nouă pentru SQL Server conține toate remedierile rapide și toate remedierile de securitate care au fost incluse cu actualizarea cumulativă anterioară. Vă recomandăm să descărcați și să instalați cele mai recente actualizări cumulative pentru SQL Server:

      

        
Notă: această remediere previne doar apariția viitoare a acestei probleme. Dacă întâmpinați deja această problemă, exportați datele într-o bază de date nouă, fără a deteriora metadatele existente. Pentru a face acest lucru, urmați acești pași:

  1. Pentru a determina dacă o partiție are un grup de fișiere nevalid, rulați următoarea interogare pentru a vedea dacă returnează un rezultat:

    SELECT * FROM sys.allocation_units AS au WHERE au.data_space_id NOT IN (SELECT data_space_id FROM sys.filegroups)
    
  2. Faceți vizibil din nou tabelul cu deteriorarea metadatelor.

    Dacă interogarea de la pasul 1 returnează un rezultat, partiția cu metadate deteriorate vă împiedică să vizualizați (să selectați * din) orice rânduri din tabel. Pentru a rezolva această problemă, eliminați partiția defectă.

    Notă: partiția defectă ar trebui să fie goală. Altfel, fișierele și grupul de fișiere în care s-au aflat nu ar fi putut fi eliminate sau șterse. 

    Pentru a face acest lucru, mutați această partiție în alt tabel care utilizează aceeași schemă de partiție. Acest tabel poate fi doar un tabel formal. Utilizați container_id din interogarea de la pasul 1 și potriviți-le cu partition_id din sys.partitions. (Asigurați-vă că rețineți partition_number.) Utilizați partition_number pentru a efectua o ALTER TABLE SWITCH PARTITION din tabelul care nu putea fi vizualizat în tabelul fictiv. Tabelul formalizat ar trebui să aibă același set de coloane și să utilizeze aceeași schemă de partiții. Interogarea pentru a găsi partiția inconsistentă poate arăta astfel:

    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. Copiați datele din tabelul care nu putea fi vizualizat anterior în baza de date nouă.

Stare

Microsoft a confirmat că aceasta este o problemă în produsele Microsoft care sunt listate în secțiunea „Se aplică la”.