Hvis du får fejlmeddelelse 7707 i SQL Server, er det fordi du forsøger at oprette et partitionsskema, der ikke specificerer nok filgrupper til at matche partitionsfunktionen.
Heldigvis er dette nemt at rette.
Eksempel på fejlen
Fejlen ser nogenlunde sådan ud:
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'.
Hvorfor skete dette?
I mit tilfælde specificerede jeg tre filgrupper, da jeg oprettede partitionsskemaet, men partitionsfunktionen genererede faktisk fire.
Her er koden, jeg brugte til at oprette partitionsfunktionen og partitionsskemaerne.
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ænseværdier, hvilket resulterer i fire partitioner. Mit partitionsskema specificerer kun tre filgrupper (der skal være fire).
Dette er en let fejl at lave, for når du opretter partitionsfunktionen, er antallet af grænseværdier, du angiver, faktisk én mindre end antallet af resulterende partitioner. Med andre ord vil antallet af oprettede partitioner være lig med antallet af grænseværdier + 1.
Hvis du ikke er helt med på bolden, kan du ved et uheld matche antallet af filgrupper med grænseværdierne og glemme, at du skal angive en filgruppe mere.
Ret fejlen
Så for at rette denne fejl skal jeg kun angive en filgruppe mere, når jeg opretter partitionsskemaet.
Min kode skulle se mere sådan ud:
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 dette tilfælde tilføjede jeg simpelthen CatsFg4
til listen over filgrupper. Dette forudsætter naturligvis, at den angivne filgruppe eksisterer.
Bemærk også, at du ikke nødvendigvis behøver at oprette en helt ny filgruppe. Du kan dele filgrupper (dvs. have flere partitioner knyttet til en enkelt filgruppe).
Derfor kunne jeg have gjort dette:
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
Bemærk, at de sidste to filgrupper er de samme (CatsFg3
).
Men du behøver ikke at stoppe der. En anden tilgang er at have alle partitioner knyttet til filgruppen.
I dette tilfælde kunne vi bruge ALL
argument, og angiv kun én filgruppe:
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