sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man fixar "Den associerade partitionsfunktionen genererar fler partitioner än det finns filgrupper som nämns i schemat" Msg 7707 i SQL Server

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


  1. Summa med SQL-server RollUP - men bara sista sammanfattningen?

  2. Hur man formaterar ett datum i T-SQL

  3. Hur man skapar en korstabellsfråga i designvy i Access

  4. Lär dig hur du prestandajusterar Microsoft SQL Server