Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment réparer "La fonction de partition associée génère plus de partitions qu'il n'y a de groupes de fichiers mentionnés dans le schéma" Msg 7707 dans SQL Server

Si vous obtenez le message d'erreur 7707 dans SQL Server, c'est parce que vous essayez de créer un schéma de partition qui ne spécifie pas suffisamment de groupes de fichiers pour correspondre à la fonction de partition.

Heureusement, cela est facile à résoudre.

Exemple d'erreur

L'erreur ressemble à ceci :

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

Pourquoi est-ce arrivé ?

Dans mon cas, j'ai spécifié trois groupes de fichiers lors de la création du schéma de partition, mais la fonction de partition en a en fait généré quatre.

Voici le code que j'ai utilisé pour créer la fonction de partition et les schémas de partition.

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

Ma fonction de partition a trois valeurs limites, ce qui donne quatre partitions. Mon schéma de partition ne spécifie que trois groupes de fichiers (il devrait y en avoir quatre).

C'est une erreur facile à commettre, car lorsque vous créez la fonction de partition, le nombre de valeurs limites que vous spécifiez est en fait un de moins que le nombre de partitions résultantes. Autrement dit, le nombre de partitions créées sera égal au nombre de valeurs limites + 1.

Si vous n'êtes pas complètement sur la balle, vous pouvez par inadvertance faire correspondre le nombre de groupes de fichiers avec les valeurs limites, oubliant que vous devez spécifier un autre groupe de fichiers.

Corrigez l'erreur

Donc, pour corriger cette erreur, tout ce que j'ai à faire est de spécifier un groupe de fichiers supplémentaire lors de la création du schéma de partition.

Mon code devrait plutôt ressembler à ceci :

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

Dans ce cas, j'ai simplement ajouté CatsFg4 à la liste des groupes de fichiers. Cela suppose évidemment que le groupe de fichiers spécifié existe.

Notez également que vous n'avez pas nécessairement besoin de créer un tout nouveau groupe de fichiers. Vous pouvez partager des groupes de fichiers (c'est-à-dire avoir plusieurs partitions mappées sur un seul groupe de fichiers).

Par conséquent, j'aurais pu faire ceci :

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

Notez que les deux derniers groupes de fichiers sont identiques (CatsFg3 ).

Mais vous n'avez pas besoin de vous arrêter là. Une autre approche consiste à avoir tous partitions mappées au groupe de fichiers.

Dans ce cas, nous pourrions utiliser le ALL argument et spécifiez un seul groupe de fichiers :

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