Jeśli otrzymasz komunikat o błędzie 7707 w SQL Server, to dlatego, że próbujesz utworzyć schemat partycji, który nie określa wystarczającej liczby grup plików, aby pasowały do funkcji partycji.
Na szczęście można to łatwo naprawić.
Przykład błędu
Błąd wygląda mniej więcej tak:
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'.
Dlaczego tak się stało?
W moim przypadku określiłem trzy grupy plików podczas tworzenia schematu partycji, ale funkcja partycji faktycznie wygenerowała cztery.
Oto kod, którego użyłem do utworzenia funkcji partycji i schematów partycji.
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
Moja funkcja partycji ma trzy wartości graniczne, co daje cztery partycje. Mój schemat partycji określa tylko trzy grupy plików (powinny być cztery).
Jest to łatwy błąd do popełnienia, ponieważ podczas tworzenia funkcji partycji liczba określonych wartości granicznych jest w rzeczywistości o jeden mniejsza niż liczba partycji wynikowych. Innymi słowy, liczba utworzonych partycji będzie równa liczbie wartości granicznych + 1.
Jeśli nie jesteś w pełni zadowolony, możesz przypadkowo dopasować liczbę grup plików do wartości granicznych, zapominając, że musisz określić jeszcze jedną grupę plików.
Napraw błąd
Aby naprawić ten błąd, wszystko, co muszę zrobić, to określić jeszcze jedną grupę plików podczas tworzenia schematu partycji.
Mój kod powinien wyglądać mniej więcej tak:
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
W tym przypadku po prostu dodałem CatsFg4
do listy grup plików. To oczywiście zakłada, że określona grupa plików istnieje.
Pamiętaj też, że niekoniecznie musisz tworzyć zupełnie nową grupę plików. Możesz udostępniać grupy plików (tj. mieć wiele partycji zmapowanych do jednej grupy plików).
Dlatego mogłem to zrobić:
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
Zauważ, że ostatnie dwie grupy plików są takie same (CatsFg3
).
Ale nie musisz na tym poprzestać. Innym podejściem jest posiadanie wszystkich partycje mapowane na grupę plików.
W tym przypadku możemy użyć ALL
argument i określ tylko jedną grupę plików:
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