Ако получите съобщение за грешка 7707 в SQL Server, това е, защото се опитвате да създадете схема на дялове, която не посочва достатъчно файлови групи, които да съответстват на функцията за дял.
За щастие това е лесно да се поправи.
Пример за грешката
Грешката изглежда така:
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'.
Защо се случи това?
В моя случай посочих три файлови групи при създаването на схемата за дялове, но функцията за дял всъщност генерира четири.
Ето кода, който използвах, за да създам функцията за разделяне и схемите за дялове.
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
Моята функция за дял има три гранични стойности, което води до четири дяла. Моята схема на дялове определя само три файлови групи (трябва да има четири).
Това е лесна грешка, тъй като когато създавате функцията за дял, броят на граничните стойности, които задавате, всъщност е с една по-малка от броя на получените дялове. С други думи, броят на създадените дялове ще бъде равен на броя на граничните стойности + 1.
Ако не сте напълно в топката, може по невнимание да съпоставите броя на файловите групи с граничните стойности, като забравите, че трябва да посочите още една файлова група.
Поправете грешката
Така че, за да коригирам тази грешка, всичко, което трябва да направя, е да посоча още една файлова група, когато създавам схемата на дяловете.
Моят код трябва да изглежда по-скоро така:
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
В този случай просто добавих CatsFg4
към списъка с файлови групи. Това очевидно предполага, че посочената файлова група съществува.
Също така имайте предвид, че не е задължително да създавате изцяло нова файлова група. Можете да споделяте файлови групи (т.е. да имате няколко дяла, съпоставени в една файлова група).
Следователно можех да направя това:
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
Забележете, че последните две файлови групи са еднакви (CatsFg3
).
Но не е нужно да спирате дотук. Друг подход е да имате всички дялове, съпоставени с файловата група.
В този случай бихме могли да използваме ALL
аргумент и посочете само една файлова група:
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