Om du får felmeddelande 7707 i SQL Server beror det på att du försöker skapa ett partitionsschema som inte anger tillräckligt många filgrupper för att matcha partitionsfunktionen.
Lyckligtvis är detta lätt att fixa.
Exempel på felet
Felet ser ut ungefär så här:
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'.
Varför hände detta?
I mitt fall angav jag tre filgrupper när jag skapade partitionsschemat, men partitionsfunktionen genererade faktiskt fyra.
Här är koden jag använde för att skapa partitionsfunktionen och partitionsscheman.
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
Min partitionsfunktion har tre gränsvärden, vilket resulterar i fyra partitioner. Mitt partitionsschema specificerar bara tre filgrupper (det borde finnas fyra).
Detta är ett lätt misstag att göra, för när du skapar partitionsfunktionen är antalet gränsvärden du anger faktiskt ett mindre än antalet resulterande partitioner. Med andra ord kommer antalet skapade partitioner att vara lika med antalet gränsvärden + 1.
Om du inte är helt på bollen kan du oavsiktligt matcha antalet filgrupper med gränsvärdena, och glömma att du behöver ange ytterligare en filgrupp.
Åtgärda felet
Så för att fixa det här felet behöver jag bara ange ytterligare en filgrupp när jag skapar partitionsschemat.
Min kod borde se ut mer så här:
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
I det här fallet lade jag helt enkelt till CatsFg4
till listan över filgrupper. Detta förutsätter uppenbarligen att den angivna filgruppen existerar.
Observera också att du inte nödvändigtvis behöver skapa en helt ny filgrupp. Du kan dela filgrupper (dvs. ha flera partitioner mappade till en enda filgrupp).
Därför kunde jag ha gjort detta:
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ägg märke till att de två sista filgrupperna är desamma (CatsFg3
).
Men du behöver inte stanna där. Ett annat tillvägagångssätt är att ha alla partitioner mappade till filgruppen.
I det här fallet kan vi använda ALL
argument och ange bara en filgrupp:
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