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