KB3095958 - KHẮC PHỤC: Lỗi siêu dữ liệu không nhất quán sau khi bạn chuyển đổi các phân vùng bảng và bỏ tệp cũng như nhóm tệp tương ứng

Áp dụng cho
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

Triệu chứng

Hãy cân nhắc các trường hợp sau:

  • Bạn có hai bảng được phân vùng trong Microsoft SQL Server 2014 và các phân vùng của bảng đầu tiên được ánh xạ tới các tệp và nhóm tệp khác nhau bằng cách sử dụng cùng một sơ đồ và chức năng phân vùng.
  • Bạn chuyển một trong các phân vùng đó sang bảng thứ hai, sau đó cắt cụt bảng thứ hai.
  • Bạn thả tệp và nhóm tệp được ánh xạ tới phân vùng được chuyển đổi.
  • Bạn chạy câu lệnh SELECT trên bảng thứ hai.

Trong trường hợp này, bạn nhận được thông báo lỗi sau:

Lưu ý

Thông báo 606, Mức 21, Trạng thái 1
Siêu dữ liệu không nhất quán. ID nhóm< tệpID nhóm> tệp được chỉ định cho tên bảng> không < tồn tại. Chạy DBCC, CHECKDB hoặc CHECKCATALOG.

Khi chạy DBCC CHECKDB/CHECKTABLE, bạn nhận được thông báo lỗi sau đây:

Lưu ý

Không thể xử lý chỉ mục <IndexName> của bảng <TableName> vì nhóm tệp (ID Nhóm <Tệp, Số_>Nhóm_Tệp) không hợp lệ.

Giải pháp

Sự cố này đã được khắc phục lần đầu tiên trong các bản cập nhật tích lũy sau đây của SQL Server:

Đề xuất: Cài đặt bản cập nhật tích lũy mới nhất cho SQL Server

Mỗi bản cập nhật tích lũy mới dành cho SQL Server chứa tất cả các bản sửa lỗi nóng và bản sửa lỗi bảo mật được tích hợp trong bản cập nhật tích lũy trước đó. Chúng tôi khuyên bạn nên tải xuống và cài đặt các bản cập nhật tích lũy mới nhất cho SQL Server:

      

        
Lưu ý Bản sửa lỗi này chỉ ngăn sự cố này xảy ra trong tương lai. Nếu bạn đang gặp phải sự cố này, hãy xuất dữ liệu của bạn vào cơ sở dữ liệu mới mà không có bất kỳ hư hỏng siêu dữ liệu nào hiện có. Để thực hiện điều này, hãy làm theo các bước sau:

  1. Để xác định xem phân vùng có nhóm tệp không hợp lệ hay không, hãy chạy truy vấn sau đây để xem liệu phân vùng có trả về kết quả hay không:

    SELECT * FROM sys.allocation_units AS au WHERE au.data_space_id NOT IN (SELECT data_space_id FROM sys.filegroups)
    
  2. Làm cho bảng có phần hỏng siêu dữ liệu có thể xem được trở lại.

    Nếu truy vấn từ bước 1 trả về kết quả, thì phân vùng có siêu dữ liệu bị hỏng đang ngăn bạn xem (chọn * từ) bất kỳ hàng nào trong bảng. Để khắc phục sự cố này, hãy xóa phân vùng xấu đó.

    Lưu ý: Phân vùng xấu sẽ trống. Nếu không, các tệp và nhóm tệp nằm trong nó không thể bị bỏ hoặc xoá. 

    Để thực hiện việc này, hãy di chuyển phân vùng này vào một bảng khác sử dụng cùng một sơ đồ phân vùng. Bảng này có thể chỉ là một bảng giả. Sử dụng container_id từ truy vấn ở bước 1 và khớp với partition_id từ sys.partitions. (Hãy đảm bảo rằng bạn ghi chú partition_number.) Sử dụng partition_number để thực hiện ALTER TABLE SWITCH PARTITION từ bảng không thể xem được đối với bảng giả. Bảng nháp cần có cùng một tập hợp cột và sử dụng cùng một sơ đồ phân vùng. Truy vấn của bạn để tìm phân vùng không nhất quán có thể có dạng như sau:

    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. Sao chép dữ liệu từ bảng không thể xem trước đó vào cơ sở dữ liệu mới.

Trạng thái

Microsoft đã xác nhận rằng đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong mục "áp dụng cho".