ALTER PARTITION FUNCTION (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseInstancia administrada de Azure SQLBase de datos SQL en Microsoft Fabric

Modifica una función de partición dividiendo o mezclando sus valores de límite. Ejecutar una ALTER PARTITION FUNCTION sentencia puede dividir una tabla o partición índice que utiliza la función de partición en dos particiones. La instrucción también puede combinar dos particiones en una.

Precaución

Varias tablas o índices pueden utilizar la misma función de partición. ALTER PARTITION FUNCTION afecta a todos ellos en una sola transacción.

Convenciones de sintaxis de Transact-SQL

Sintaxis

  
ALTER PARTITION FUNCTION partition_function_name()  
{   
    SPLIT RANGE ( boundary_value )  
  | MERGE RANGE ( boundary_value )   
} [ ; ]  

Argumentos

partition_function_name
Es el nombre de la función de partición que se va a modificar.

RANGO DIVIDIDO ( boundary_value )
Agrega una partición a la función de partición. boundary_value determina el intervalo de la nueva partición y debe ser distinto de los intervalos de límites existentes de la función de partición. El motor de base de datos divide en dos uno de los intervalos existentes, basándose en boundary_value. De estos dos rangos, el que tiene el valor boundary_value es la nueva partición.

Debe haber un grupo de archivos en línea y estar marcado por el esquema de partición que utiliza la función de partición como NEXT USED para contener la nueva partición. Una CREATE PARTITION SCHEME instrucción asigna grupos de archivos a particiones. La CREATE PARTITION FUNCTION instrucción crea menos particiones que grupos de archivos para almacenarlos. Una CREATE PARTITION SCHEME instrucción puede reservar más grupos de archivos de los necesarios. Si esto sucede, habrá grupos de archivos sin asignar. Además, el esquema de partición marca uno de los grupos de archivos como NEXT USED. Este grupo de archivos almacena la partición nueva. Si no hay grupos de archivos, el esquema de particiones marca como NEXT USED, debes usar una ALTER PARTITION SCHEME sentencia.

La ALTER PARTITION SCHEME instrucción puede añadir un grupo de archivos, o seleccionar uno existente, para que contenga la nueva partición. Puede asignar un grupo de archivos que ya contenga particiones para almacenar particiones adicionales. Una función de partición puede participar en más de un esquema de particiones. Por este motivo, todos los esquemas de partición que usan la función de partición a la que va a agregar particiones deben tener un grupo de archivos NEXT USED. De lo contrario, la ALTER PARTITION FUNCTION sentencia falla con un error que muestra el esquema de partición o esquemas que carecen de un grupo de archivos NEXT USED.

Si crea todas las particiones en el mismo grupo de archivos, ese grupo se asigna inicialmente para que sea el grupo de archivos NEXT USED automáticamente. Sin embargo, después de realizarse una operación de división, ya no hay ningún grupo de archivos NEXT USED seleccionado. Asigna explícitamente el grupo de archivos como el SIGUIENTE USADO usando ALTER PARTITION SCHEME o una operación de división próxima fallará.

Nota

Limitaciones con el índice de almacén de columnas: solo las particiones vacías se pueden dividir cuando existe un índice de almacén de columnas en la tabla. Tendrá que quitar o deshabilitar el índice de almacén de columnas antes de realizar esta operación.

MERGE [ RANGO ( boundary_value) ]
Quita una partición y combina cualquier valor que exista en la partición en una de las particiones restantes. RANGE (boundary_value) debe ser un valor límite existente de la partición que se va a quitar. Este argumento elimina el grupo de archivos que originalmente contenía el valor boundary_value del esquema de partición, a menos que lo use una partición restante o que esté marcado con la propiedad NEXT USED. La partición combinada se encuentra en el grupo de archivos que originalmente no contenía boundary_value. boundary_value es una expresión constante que puede hacer referencia a variables (incluidas las variables de tipos definidos por el usuario) o funciones (incluidas las funciones definidas por el usuario). No puede hacer referencia a una expresión de Transact-SQL. boundary_value debe coincidir con el tipo de datos de su columna de partición correspondiente, o debe poder convertirse a dicho tipo de datos de forma implícita. Tampoco se puede truncar boundary_value durante la conversión implícita de forma que el tamaño y la escala del valor no coincidan con su correspondiente valor input_parameter_type.

Nota

Limitaciones con el índice de almacén de columnas: no se pueden combinar dos particiones no vacías que contengan un índice de almacén de columnas. Tendrá que quitar o deshabilitar el índice de almacén de columnas antes de realizar esta operación.

Prácticas recomendadas

Mantenga siempre las particiones vacías en ambos extremos del rango de partición. Mantenga las particiones en ambos extremos para garantizar que la división y la combinación de particiones no realizan ningún movimiento de datos. La división de particiones se produce al principio y la combinación de particiones, al final. Evite dividir o combinar particiones con datos. Dividir o combinar particiones con datos puede ser ineficaz, ya que puede multiplicar por cuatro la generación de registros y causar bloqueos graves.

La principal razón para colocar las particiones en varios grupos de archivos es garantizar que se puedan realizar operaciones de copia de seguridad y restauración en particiones de forma independiente. Obtenga más información sobre grupos de archivos y estrategias de partición en Grupos de archivos.

Limitaciones y restricciones

ALTER PARTITION FUNCTION reparticiona cualquier tabla e índice que utilice la función en una única operación atómica. Sin embargo, esta operación se produce sin conexión, y dependiendo del alcance de las reparticiones puede consumir muchos recursos.

Úsalo ALTER PARTITION FUNCTION solo para dividir una partición en dos, o fusionar dos particiones en una sola. Para cambiar el modo en el que se crean particiones en una tabla (por ejemplo, de 10 particiones a 5), puede aplicar cualquiera de las opciones siguientes. Dependiendo de la configuración del sistema, estas opciones pueden tener un consumo de recursos diferente:

  • Cree una tabla con particiones con la función de partición necesaria. Luego, inserta los datos de la tabla antigua en la nueva tabla usando un INSERT INTO... Instrucción SELECT FROM.

  • Cree un índice clúster con particiones en un montón.

    Nota

    El resultado de quitar un índice clúster con particiones es un montón con particiones.

  • Elimina y reconstruye un índice particionado existente usando la sentencia Transact-SQL CREATE INDEX con la cláusula DROP EXISTING = ON.

  • Ejecuta una secuencia de ALTER PARTITION FUNCTION declaraciones.

Todos los grupos de archivos afectados por ALTER PARTITION FUNCTION deben estar en línea.

ALTER PARTITION FUNCTION falla cuando existe un índice agrupado desactivado en cualquier tabla que use la función de partición.

El motor de base de datos no proporciona compatibilidad de replicación para modificar una función de partición. Los cambios en la función de partición de la base de datos de publicaciones se deben aplicar manualmente en la base de datos de suscripciones.

Permisos

Cualquiera de los siguientes permisos se puede usar para ejecutar ALTER PARTITION FUNCTION:

  • Permiso ALTER ANY DATASPACE. De forma predeterminada, este permiso corresponde a los miembros del rol fijo de servidor sysadmin y a los roles fijos de base de datos db_owner y db_ddladmin .

  • Permiso CONTROL o ALTER en la base de datos en la que se ha creado la función de partición.

  • Permiso CONTROL SERVER o ALTER ANY DATABASE en el servidor de la base de datos en la que se creó la función de partición.

Ejemplos

A. División de una partición de una tabla o un índice con particiones en dos particiones

En el ejemplo siguiente se crea una función de partición para crear cuatro particiones en una tabla o en un índice. ALTER PARTITION FUNCTION divide una de las particiones en dos para crear un total de cinco particiones.

IF EXISTS (SELECT * FROM sys.partition_functions  
    WHERE name = 'myRangePF1')  
DROP PARTITION FUNCTION myRangePF1;  
GO  
CREATE PARTITION FUNCTION myRangePF1 (int)  
AS RANGE LEFT FOR VALUES ( 1, 100, 1000 );  
GO  
--Split the partition between boundary_values 100 and 1000  
--to create two partitions between boundary_values 100 and 500  
--and between boundary_values 500 and 1000.  
ALTER PARTITION FUNCTION myRangePF1 ()  
SPLIT RANGE (500);  

B. Combinación de dos particiones de una tabla con particiones en una partición

En el ejemplo siguiente se crea la misma función de partición que antes y después se mezclan dos de las particiones en una partición para conseguir un total de tres particiones.

IF EXISTS (SELECT * FROM sys.partition_functions  
    WHERE name = 'myRangePF1')  
DROP PARTITION FUNCTION myRangePF1;  
GO  
CREATE PARTITION FUNCTION myRangePF1 (int)  
AS RANGE LEFT FOR VALUES ( 1, 100, 1000 );  
GO  
--Merge the partitions between boundary_values 1 and 100  
--and between boundary_values 100 and 1000 to create one partition  
--between boundary_values 1 and 1000.  
ALTER PARTITION FUNCTION myRangePF1 ()  
MERGE RANGE (100);  

Pasos siguientes

Más información sobre la partición de tablas y conceptos relacionados en los artículos siguientes: