อาการ
พิจารณาสถานการณ์ต่อไปนี้:
-
คุณมีสองพาร์ติชันตารางใน Microsoft SQL Server ๒๐๑๔และพาร์ติชันของตารางแรกจะถูกแมปไปยังไฟล์และ filegroups ที่แตกต่างกันโดยใช้ชุดรูปแบบพาร์ติชันและฟังก์ชันเดียวกัน
-
คุณสลับหนึ่งในพาร์ติชันเหล่านั้นไปยังตารางที่สองและจากนั้นคุณตัดตารางที่สอง
-
คุณวางไฟล์และ filegroups ที่ถูกแมปไปยังพาร์ติชันที่ถูกสลับ
-
คุณเรียกใช้คำสั่ง SELECT บนตารางที่สอง
ในสถานการณ์สมมตินี้คุณจะได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:
Msg ๖๐๖ระดับ21รัฐ1Metadata ไม่สอดคล้องกัน Id กลุ่มที่<id กลุ่ม> ที่ระบุสำหรับตาราง <ชื่อตาราง ที่> ไม่มีอยู่ เรียกใช้ DBCC CHECKDB หรือ CHECKCATALOG
เมื่อคุณเรียกใช้ DBCC CHECKDB/CHECKTABLE คุณจะได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:
ไม่สามารถทำการประมวลผลดัชนี <IndexName> ของตาราง <ชื่อ> ได้เนื่องจากกลุ่มแฟ้ม (กลุ่มผู้เข้ากลุ่ม <> FileGroupNumber ) ไม่ถูกต้อง
การแก้ไข
ปัญหานี้ได้รับการแก้ไขครั้งแรกในการอัปเดตที่สะสมของ SQL Server ต่อไปนี้:
การอัปเดตที่สะสมใหม่แต่ละรายการสำหรับ SQL Server ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมดและการแก้ไขการรักษาความปลอดภัยทั้งหมดที่รวมอยู่ในการอัปเดตที่สะสมก่อนหน้านี้ เราขอแนะนำให้คุณดาวน์โหลดและติดตั้งการอัปเดตที่สะสมล่าสุดสำหรับ SQL Server:
หมายเหตุ การแก้ไขนี้จะป้องกันปัญหาที่เกิดขึ้นในอนาคตเท่านั้น ถ้าคุณกำลังประสบปัญหานี้อยู่แล้วให้ส่งออกข้อมูลของคุณลงในฐานข้อมูลใหม่โดยไม่มีความเสียหายของ metadata ที่มีอยู่ โดยทำตามขั้นตอนต่อไปนี้:
-
เมื่อต้องการตรวจสอบว่าพาร์ติชันมีกลุ่มไฟล์ที่ไม่ถูกต้องหรือไม่ให้เรียกใช้คิวรีต่อไปนี้เพื่อดูว่าผลลัพธ์ดังกล่าวจะส่งกลับผลลัพธ์หรือไม่
SELECT * FROM sys.allocation_units AS au WHERE au.data_space_id NOT IN (SELECT data_space_id FROM sys.filegroups)
-
ทำให้ตารางที่มีความเสียหายของ metadata สามารถดูได้อีกครั้ง ถ้าคิวรีจากขั้นตอนที่1ส่งกลับผลลัพธ์พาร์ติชันที่มี metadata ที่เสียหายจะทำให้คุณไม่สามารถดูได้ (เลือก * จาก) แถวใดก็ได้ในตาราง เมื่อต้องการแก้ไขปัญหานี้ให้เอาพาร์ติชันที่ไม่ถูกต้องออกหมายเหตุ พาร์ติชันที่ไม่ถูกต้องควรว่างเปล่า มิฉะนั้นไฟล์และกลุ่มไฟล์ที่ไม่ได้ถูกลบหรือลบไปแล้ว เมื่อต้องการทำเช่นนี้ให้ย้ายพาร์ติชันนี้ไปยังตารางอื่นที่ใช้ชุดรูปแบบการแบ่งพาร์ติชันเดียวกัน ตารางนี้อาจเป็นเพียงตาราง dummy ใช้ container_id จากคิวรีในขั้นตอนที่1และจับคู่กับ partition_id จากพาร์ติชัน sys (ตรวจสอบให้แน่ใจว่าคุณได้บันทึก partition_number) ใช้ partition_number เพื่อทำการเปลี่ยนแปลงพาร์ติชันสลับตารางจากตารางที่ถูก unviewable ไปยังตาราง dummy ตาราง dummy ควรมีชุดคอลัมน์เดียวกันและใช้ชุดรูปแบบพาร์ติชันเดียวกัน คิวรีของคุณเพื่อค้นหาพาร์ติชันที่ไม่สอดคล้องกันอาจมีลักษณะดังต่อไปนี้:
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;
-
คัดลอกข้อมูลจากตาราง unviewable ก่อนหน้านี้ลงในฐานข้อมูลใหม่
สถานะ
Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"