sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo corregir "La función de partición asociada genera más particiones que grupos de archivos mencionados en el esquema" Msg 7707 en SQL Server

Si recibe el mensaje de error 7707 en SQL Server, es porque está intentando crear un esquema de partición que no especifica suficientes grupos de archivos para que coincida con la función de partición.

Afortunadamente, esto es fácil de solucionar.

Ejemplo del error

El error se parece a esto:

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

¿Por qué sucedió esto?

En mi caso, especifiqué tres grupos de archivos al crear el esquema de partición, pero la función de partición en realidad generó cuatro.

Este es el código que usé para crear la función de partición y los esquemas de partición.

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

Mi función de partición tiene tres valores límite, lo que da como resultado cuatro particiones. Mi esquema de partición solo especifica tres grupos de archivos (debería haber cuatro).

Este es un error fácil de cometer, porque cuando crea la función de partición, el número de valores límite que especifica es en realidad uno menos que el número de particiones resultantes. En otras palabras, la cantidad de particiones creadas será igual a la cantidad de valores límite + 1.

Si no está completamente concentrado, es posible que, sin darse cuenta, haga coincidir la cantidad de grupos de archivos con los valores límite, olvidando que necesita especificar un grupo de archivos más.

Corregir el error

Entonces, para corregir este error, todo lo que necesito hacer es especificar un grupo de archivos más al crear el esquema de partición.

Mi código debería parecerse más a esto:

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

En este caso, simplemente agregué CatsFg4 a la lista de grupos de archivos. Obviamente, esto supone que existe el grupo de archivos especificado.

También tenga en cuenta que no necesariamente necesita crear un grupo de archivos completamente nuevo. Puede compartir grupos de archivos (es decir, tener varias particiones asignadas a un solo grupo de archivos).

Por lo tanto, podría haber hecho esto:

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

Observe que los dos últimos grupos de archivos son iguales (CatsFg3 ).

Pero no es necesario detenerse allí. Otro enfoque es tener todos particiones asignadas al grupo de archivos.

En este caso podríamos usar ALL argumento y especifique solo un grupo de archivos:

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