Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách khắc phục “Chức năng phân vùng được liên kết tạo ra nhiều phân vùng hơn số nhóm tệp được đề cập trong lược đồ” Msg 7707 trong SQL Server

Nếu bạn nhận được thông báo lỗi 7707 trong SQL Server, thì đó là do bạn đang cố tạo lược đồ phân vùng không chỉ định đủ nhóm tệp để khớp với chức năng phân vùng.

May mắn thay, điều này rất dễ sửa chữa.

Ví dụ về lỗi

Lỗi trông giống như sau:

Msg 7707, Level 16, State 1, Line 1
The associated partition function 'CatsPartitionFunction' generates more partitions than there are file groups mentioned in the scheme 'CatsPartitionScheme'.

Tại sao điều này lại xảy ra?

Trong trường hợp của tôi, tôi đã chỉ định ba nhóm tệp khi tạo lược đồ phân vùng, nhưng hàm phân vùng thực sự tạo ra bốn nhóm.

Đây là mã tôi đã sử dụng để tạo hàm phân vùng và lược đồ phân vùng.

CREATE PARTITION FUNCTION CatsPartitionFunction (int)  
    AS RANGE LEFT FOR VALUES (1, 100, 10000);
GO  

CREATE PARTITION SCHEME CatsPartitionScheme  
    AS PARTITION CatsPartitionFunction  
    TO (CatsFg1, CatsFg2, CatsFg3);  
GO

Hàm phân vùng của tôi có ba giá trị ranh giới, dẫn đến bốn phân vùng. Lược đồ phân vùng của tôi chỉ chỉ định ba nhóm tệp (nên có bốn nhóm).

Đây là một sai lầm dễ mắc phải, bởi vì khi bạn tạo hàm phân vùng, số giá trị ranh giới mà bạn chỉ định thực sự ít hơn số phân vùng kết quả. Nói cách khác, số lượng phân vùng được tạo sẽ bằng số giá trị biên + 1.

Nếu bạn không hoàn toàn hiểu rõ, bạn có thể vô tình so khớp số lượng nhóm tệp với các giá trị ranh giới, quên rằng bạn cần chỉ định một nhóm tệp nữa.

Sửa lỗi

Vì vậy, để khắc phục lỗi này, tất cả những gì tôi cần làm là chỉ định thêm một nhóm tệp khi tạo lược đồ phân vùng.

Mã của tôi trông giống như thế này:

CREATE PARTITION FUNCTION CatsPartitionFunction (int)  
    AS RANGE LEFT FOR VALUES (1, 100, 10000);
GO 

CREATE PARTITION SCHEME CatsPartitionScheme  
    AS PARTITION CatsPartitionFunction  
    TO (CatsFg1, CatsFg2, CatsFg3, CatsFg4);  
GO

Trong trường hợp này, tôi chỉ cần thêm CatsFg4 vào danh sách nhóm tệp. Điều này rõ ràng giả định rằng nhóm tệp được chỉ định tồn tại.

Cũng lưu ý rằng bạn không nhất thiết phải tạo một nhóm tệp hoàn toàn mới. Bạn có thể chia sẻ nhóm tệp (tức là có nhiều phân vùng được ánh xạ vào một nhóm tệp).

Do đó, tôi có thể đã làm điều này:

CREATE PARTITION FUNCTION CatsPartitionFunction (int)  
    AS RANGE LEFT FOR VALUES (1, 100, 10000);
GO 

CREATE PARTITION SCHEME CatsPartitionScheme  
    AS PARTITION CatsPartitionFunction  
    TO (CatsFg1, CatsFg2, CatsFg3, CatsFg3);  
GO

Lưu ý rằng hai nhóm tệp cuối cùng giống nhau (CatsFg3 ).

Nhưng bạn không cần phải dừng lại ở đó. Một cách tiếp cận khác là có tất cả phân vùng được ánh xạ tới nhóm tệp.

Trong trường hợp này, chúng tôi có thể sử dụng ALL và chỉ định một nhóm tệp:

CREATE PARTITION FUNCTION CatsPartitionFunction (int)  
    AS RANGE LEFT FOR VALUES (1, 100, 10000);
GO  
 
CREATE PARTITION SCHEME CatsPartitionScheme  
    AS PARTITION CatsPartitionFunction  
    ALL TO (CatsFg1);  
GO


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đặt lại hạt giống danh tính sau khi xóa bản ghi trong SQL Server

  2. Cách sửa đổi thời gian lưu giữ dữ liệu thu thập dữ liệu thay đổi (CDC) trong SQL Server - Hướng dẫn sử dụng SQL Server

  3. Cách lấy mô hình khôi phục của cơ sở dữ liệu trong SQL Server bằng T-SQL

  4. Cách hoạt động của hàm STR () trong SQL Server (T-SQL)

  5. Cách lấy danh sách tất cả các Ràng buộc Kiểm tra trong Cơ sở dữ liệu SQL Server - Hướng dẫn SQL Server / TSQL Phần 85