Simptome

Luați în considerare următorul scenariu:

  • Aveți două tabele partiționate în Microsoft SQL Server 2014 și partițiile primului tabel sunt mapate la fișiere și grupuri diferite, utilizând aceeași schemă de partiție și aceeași funcție.

  • Comutați una dintre acele partiții la al doilea tabel, apoi trunchiați al doilea tabel.

  • Fixați fișiere și grupuri care sunt mapate la partiția comutată.

  • Rulează o instrucțiune SELECT pe al doilea tabel.

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

MSG 606, nivel 21, inconsistență 1Metadata de stat. Filegroup ID<filegroup id> specificat pentru tabelul <Nume tabel> nu există. Rulează DBCC CHECKDB sau CHECKCATALOG.

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

Nu se poate procesa index <IndexName> de tabel <tablename> deoarece filegroup (filegroup ID <FileGroupNumber>) este nevalid.

Rezolvare

Problema a fost remediată pentru prima dată în următoarele actualizări cumulative de SQL Server:

Fiecare nouă actualizare cumulativă pentru SQL Server conține toate remedierile rapide și toate remedierile de securitate care au fost incluse în 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ă nicio deteriorare existentă a metadatelor. Pentru a face acest lucru, urmați acești pași:

  1. Pentru a determina dacă o partiție are un filegroup 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 tabelul cu deteriorarea metadatelor vizibilă din nou. Dacă interogarea de la pasul 1 returnează un rezultat, partiția cu metadate deteriorate vă împiedică să vizualizați (selectați * de la) toate rândurile din tabel. Pentru a rezolva această problemă, eliminați acea partiție nepotrivită.Notă Partiția greșită trebuie să fie goală. În caz contrar, fișierele și filegrouple în care a fost nu ar fi putut fi eliminate sau șterse. Pentru a face acest lucru, mutați această partiție în alt tabel care utilizează același sistem de partiționare. Acest tabel poate fi doar un tabel inactiv. Utilizați container_id din interogarea din pasul 1 și potriviți-l cu partition_id din sys. partiții. (Asigurați-vă că notați partition_number.) Utilizați partition_number pentru a efectua o partiție ALTER TABLE SWITCH din tabelul care a fost nevizualizat la tabelul Dummy. Tabelul Dummy trebuie să aibă același set de coloane și să utilizeze aceeași schemă de partiție. Interogarea pentru a găsi partiția inconsistentă poate semăna cu următoarea:

    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 nevizualizat anterior în noua bază de date.

Stare

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

Aveți nevoie de ajutor suplimentar?

Extindeți-vă competențele
Explorați instruirea
Fiți primul care obține noile caracteristici
Alăturați-vă la Microsoft Insider

V-a fost de ajutor această informație?

Cât de mulțumit sunteți de calitatea traducerii?

Ce v-a afectat experiența?

Aveți feedback suplimentar? (Opțional)

Vă mulțumim pentru feedback!

×