Pokud se na serveru SQL zobrazí chybová zpráva 7707, je to proto, že se pokoušíte vytvořit schéma oddílů, které neurčuje dostatek skupin souborů, aby odpovídaly funkci oddílu.
Naštěstí to lze snadno opravit.
Příklad chyby
Chyba vypadá asi takto:
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'.
Proč se to stalo?
V mém případě jsem při vytváření schématu oddílů zadal tři skupiny souborů, ale funkce oddílů ve skutečnosti vygenerovala čtyři.
Zde je kód, který jsem použil k vytvoření funkce oddílu a schémat oddílů.
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
Moje oddílová funkce má tři hraniční hodnoty, což vede ke čtyřem oddílům. Moje schéma oddílů určuje pouze tři skupiny souborů (měly by být čtyři).
To je snadná chyba, protože když vytváříte funkci oddílu, počet zadaných hraničních hodnot je ve skutečnosti o jednu menší než počet výsledných oddílů. Jinými slovy, počet vytvořených oddílů se bude rovnat počtu hraničních hodnot + 1.
Pokud nejste úplně na kouli, můžete nechtěně přiřadit počet skupin souborů k hraničním hodnotám a zapomenout, že musíte zadat ještě jednu skupinu souborů.
Opravit chybu
Takže k opravě této chyby vše, co musím udělat, je určit jednu další skupinu souborů při vytváření schématu oddílů.
Můj kód by měl vypadat spíše takto:
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
V tomto případě jsem jednoduše přidal CatsFg4
do seznamu skupin souborů. To samozřejmě předpokládá, že zadaná skupina souborů existuje.
Všimněte si také, že nemusíte nutně vytvářet celou novou skupinu souborů. Můžete sdílet skupiny souborů (tj. mít více oddílů namapovaných na jednu skupinu souborů).
Proto jsem mohl udělat toto:
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
Všimněte si, že poslední dvě skupiny souborů jsou stejné (CatsFg3
).
Ale nemusíte se tam zastavit. Dalším přístupem je mít vše oddíly mapované do skupiny souborů.
V tomto případě bychom mohli použít ALL
argument a zadejte pouze jednu skupinu souborů:
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