ALTER PARTITION FUNCTION (Transact-SQL)

Se aplica a: síSQL Server (todas las versiones admitidas) SíAzure SQL Database

Modifica una función de partición dividiendo o mezclando sus valores de límite. Al ejecutar una instrucción ALTER PARTITION FUNCTION, se puede dividir un índice o una partición de tabla que use la función de partición en dos particiones. La instrucción también puede combinar dos particiones en una partición menos.

Precaución

Varias tablas o índices pueden utilizar la misma función de partición. ALTER PARTITION FUNCTION afecta a todas ellas en una única transacción.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Nota

Para ver la sintaxis de Transact-SQL para SQL Server 2014 y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

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

SPLIT RANGE ( 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. 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. La instrucción CREATE PARTITION SCHEME asigna grupos de archivos a particiones. La instrucción CREATE PARTITION FUNCTION crea menos particiones que grupos de archivos para almacenarlos. Una instrucción CREATE PARTITION SCHEME puede reservar más grupos de archivos que 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 ningún grupo de archivos que el esquema de partición marca como NEXT USED, debe usar una instrucción ALTER PARTITION SCHEME.

La instrucción ALTER PARTITION SCHEME puede agregar un grupo de archivos, o seleccionar uno existente, para almacenar 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 instrucción ALTER PARTITION FUNCTION produce un error que muestra los esquemas de partición a los que les falta 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. Asigne explícitamente el grupo de archivos para que sea el grupo de archivos NEXT USED mediante ALTER PARTITION SCHEME; de lo contrario, una operación de división posterior producirá errores.

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 [ RANGE ( 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.

Limitaciones y restricciones

ALTER PARTITION FUNCTION vuelve a crear particiones en cualquier tabla o í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.

ALTER PARTITION FUNCTION se puede utilizar solamente para dividir una partición en dos o combinar dos particiones en una. 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. A continuación, inserte los datos de la tabla antigua en la nueva utilizando la instrucción INSERT INTO...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.

  • Quite y vuelva a generar un índice con particiones existente mediante la instrucción CREATE INDEX de Transact-SQL con la cláusula DROP EXISTING = ON.

  • Ejecute una secuencia de instrucciones ALTER PARTITION FUNCTION.

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

ALTER PARTITION FUNCTION produce un error cuando existe un índice clúster deshabilitado en cualquiera de las tablas que utilizan la función de partición.

SQL Server 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

Se pueden utilizar cualquiera de los siguientes permisos 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 ha creado la función de partición.

Ejemplos

A. Dividir 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. Mezclar 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);  

Consulte también

Tablas e índices con particiones
CREATE PARTITION FUNCTION (Transact-SQL)
DROP PARTITION FUNCTION (Transact-SQL)
CREATE PARTITION SCHEME (Transact-SQL)
ALTER PARTITION SCHEME (Transact-SQL)
DROP PARTITION SCHEME (Transact-SQL)
CREATE INDEX (Transact-SQL)
ALTER INDEX (Transact-SQL)
CREATE TABLE (Transact-SQL)
sys.partition_functions (Transact-SQL)
sys.partition_parameters (Transact-SQL) sys.partition_range_values (Transact-SQL)
sys.partitions (Transact-SQL)
sys.tables (Transact-SQL)
sys.indexes (Transact-SQL)
sys.index_columns (Transact-SQL)