Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So beheben Sie „Die zugeordnete Partitionsfunktion generiert mehr Partitionen, als im Schema erwähnte Dateigruppen vorhanden sind“ Msg 7707 in SQL Server

Wenn Sie die Fehlermeldung 7707 in SQL Server erhalten, liegt das daran, dass Sie versuchen, ein Partitionsschema zu erstellen, das nicht genügend Dateigruppen angibt, um mit der Partitionsfunktion übereinzustimmen.

Glücklicherweise ist dies einfach zu beheben.

Beispiel für den Fehler

Der Fehler sieht in etwa so aus:

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'.

Warum ist das passiert?

In meinem Fall habe ich beim Erstellen des Partitionsschemas drei Dateigruppen angegeben, aber die Partitionsfunktion hat tatsächlich vier generiert.

Hier ist der Code, den ich verwendet habe, um die Partitionsfunktion und die Partitionsschemata zu erstellen.

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

Meine Partitionsfunktion hat drei Grenzwerte, was zu vier Partitionen führt. Mein Partitionsschema gibt nur drei Dateigruppen an (es sollten vier sein).

Das ist ein leichter Fehler, denn wenn Sie die Partitionsfunktion erstellen, ist die Anzahl der Grenzwerte, die Sie angeben, um eins kleiner als die Anzahl der resultierenden Partitionen. Mit anderen Worten, die Anzahl der erstellten Partitionen entspricht der Anzahl der Grenzwerte + 1.

Wenn Sie nicht ganz auf dem Laufenden sind, gleichen Sie möglicherweise versehentlich die Anzahl der Dateigruppen mit den Grenzwerten ab und vergessen, dass Sie eine weitere Dateigruppe angeben müssen.

Fehler beheben

Um diesen Fehler zu beheben, muss ich also beim Erstellen des Partitionsschemas nur eine weitere Dateigruppe angeben.

Mein Code sollte eher so aussehen:

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

In diesem Fall habe ich einfach CatsFg4 hinzugefügt zur Liste der Dateigruppen. Dies setzt natürlich voraus, dass die angegebene Dateigruppe existiert.

Beachten Sie auch, dass Sie nicht unbedingt eine ganz neue Dateigruppe erstellen müssen. Sie können Dateigruppen freigeben (d. h. mehrere Partitionen einer einzelnen Dateigruppe zuordnen).

Daher hätte ich Folgendes tun können:

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

Beachten Sie, dass die letzten beiden Dateigruppen identisch sind (CatsFg3 ).

Aber Sie müssen nicht dort aufhören. Ein anderer Ansatz ist, alle zu haben Partitionen, die der Dateigruppe zugeordnet sind.

In diesem Fall könnten wir den ALL verwenden Argument, und geben Sie nur eine Dateigruppe an:

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