Simptomi
Razmotrite sledeći scenario:
-
Imate dve tabele sa particijama u sistemu Microsoft SQL Server 2014, a particije prve tabele mapirane su u različite datoteke i grupe datoteka pomoću iste šeme particija i funkcije.
-
Jednu od tih particija prebacite na drugu tabelu, a zatim skratite drugu tabelu.
-
Otpustite datoteke i grupe datoteka koje su mapirane na zamenjenu particiju.
-
Pokrenete izvod SELECT na drugoj tabeli.
U ovom scenariju dobijate sledeću poruku o grešci:
Msg 606, nivo 21, nedoslednost države 1Metadata. ID datoteke<datoteke> naveden za ime <tabele> ne postoji. Pokrenite DBCC CHECKDB ili CHECKCATALOG.
Kada pokrenete DBCC CHECKDB/CHECKTABLE, dobijate sledeću poruku o grešci:
Nije moguće obraditi indeks <IndexName> tabele <TableName> zato što je grupa datoteka (FileGroup ID <FileGroupNumber>) nevažeća.
Rešenje
Problem je prvi put otklonjen u sledećim kumulativnim ispravkama sistema SQL Server:
Svaka nova kumulativna ispravka za SQL Server sadrži sve hitne ispravke i sve bezbednosne ispravke koje su bile uključene u prethodnu kumulativnu ispravku. Preporučujemo da preuzmete i instalirate najnovije kumulativne ispravke za SQL Server:
Napomena Ova ispravka samo sprečava buduća pojavljivanja ovog problema. Ako već imate ovaj problem, izvezite podatke u svežu bazu podataka bez postojećeg oštećenja metapodataka. Da biste to uradili, sledite ove korake:
-
Da biste utvrdili da li particija ima nevažeću grupu datoteka, pokrenite sledeći upit da biste videli da li daje rezultat:
SELECT * FROM sys.allocation_units AS au WHERE au.data_space_id NOT IN (SELECT data_space_id FROM sys.filegroups)
-
Ponovo učinite tabelu sa oštećenjem metapodataka. Ako upit iz koraka 1 vrati rezultat, particija sa oštećenim metapodacima sprečava prikazivanje (izaberite * iz) bilo kog reda u tabeli. Da biste otklonili ovaj problem, uklonite tu lošu particiju.Napomena Loša particija bi trebalo da bude prazna. U suprotnom, datoteke i grupa datoteka u kojima se bila nisu mogli biti ispušteni ili izbrisani. Da biste to uradili, premestite ovu particiju u drugu tabelu koja koristi istu šemu particija. Ovaj sto moћe da bude samo glupi sto. Koristite container_id upita u koraku 1 i uparite ga sa partition_id sys.particija. (Uverite se da ste zanemeli partition_number.) Koristite partition_number da biste izvršili alter TABLE SWITCH PARTICIJU iz tabele koja je bila neopoziva u lažnu tabelu. Lažna tabela bi trebalo da ima isti skup kolona i da koristi istu šemu particija. Upit za pronalaženje nedosledne particije može da liči na sledeću:
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;
-
Kopirajte podatke iz prethodno nepoželjane tabele u novu bazu podataka.
Status
Microsoft je potvrdio da je ovo problem u Microsoft proizvodima koji su navedeni u odeljku "Odnosi se na".