ALTER PARTITION FUNCTION (Transact-SQL)ALTER PARTITION FUNCTION (Transact-SQL)

SE APLICA A: síSQL Server síAzure SQL Database noAzure Synapse Analytics (SQL DW) noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Modifica una función de partición dividiendo o mezclando sus valores de límite.Alters a partition function by splitting or merging its boundary values. 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.Running an ALTER PARTITION FUNCTION statement can split one table partition or index that uses the partition function into two partitions. La instrucción también puede combinar dos particiones en una partición menos.The statement can also merge two partitions into one less partition.

Precaución

Varias tablas o índices pueden utilizar la misma función de partición.More than one table or index can use the same partition function. ALTER PARTITION FUNCTION afecta a todas ellas en una única transacción.ALTER PARTITION FUNCTION affects all of them in a single transaction.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

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

ArgumentosArguments

partition_function_namepartition_function_name
Es el nombre de la función de partición que se va a modificar.Is the name of the partition function to be modified.

SPLIT RANGE ( boundary_value )SPLIT RANGE ( boundary_value )
Agrega una partición a la función de partición.Adds one partition to the partition function. 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.boundary_value determines the range of the new partition, and must differ from the existing boundary ranges of the partition function. Motor de base de datosDatabase Engine divide en dos uno de los intervalos existentes, basándose en boundary_value.Based on boundary_value, the Motor de base de datosDatabase Engine splits one of the existing ranges into two. De estos dos rangos, el que tiene el valor boundary_value es la nueva partición.Of these two ranges, the one with the new boundary_value is the new partition.

Debe haber un grupo de archivos en líneaA filegroup must exist online. 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.And, the partition scheme that uses the partition function as NEXT USED to hold the new partition must mark the filegroup. La instrucción CREATE PARTITION SCHEME asigna grupos de archivos a particiones.A CREATE PARTITION SCHEME statement assigns filegroups to partitions. La instrucción CREATE PARTITION FUNCTION crea menos particiones que grupos de archivos para almacenarlos.The CREATE PARTITION FUNCTION statement creates fewer partitions than filegroups to hold them. Una instrucción CREATE PARTITION SCHEME puede reservar más grupos de archivos que los necesarios.A CREATE PARTITION SCHEME statement may set aside more filegroups than needed. Si esto sucede, habrá grupos de archivos sin asignar.If that happens, then you'll end up with unassigned filegroups. Además, el esquema de partición marca uno de los grupos de archivos como NEXT USED.Also, the partition scheme marks one of the filegroups as NEXT USED. Este grupo de archivos almacena la partición nueva.This filegroup holds the new partition. 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.If there are no filegroups the partition scheme marks as NEXT USED, you must use an ALTER PARTITION SCHEME statement.

La instrucción ALTER PARTITION SCHEME puede agregar un grupo de archivos, o seleccionar uno existente, para almacenar la nueva partición.The ALTER PARTITION SCHEME statement can either add a filegroup, or select an existing one, to hold the new partition. Puede asignar un grupo de archivos que ya contenga particiones para almacenar particiones adicionales.You can assign a filegroup that already holds partitions to hold additional partitions. Una función de partición puede participar en más de un esquema de particiones.A partition function can participate in more than one partition scheme. 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.For this reason, all the partition schemes that use the partition function to which you're adding partitions must have a NEXT USED filegroup. 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.Otherwise, the ALTER PARTITION FUNCTION statement fails with an error that displays the partition scheme or schemes that lack a NEXT USED filegroup.

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.If you create all the partitions in the same filegroup, that filegroup is initially assigned to be the NEXT USED filegroup automatically. Sin embargo, después de realizarse una operación de división, ya no hay ningún grupo de archivos NEXT USED seleccionado.However, after a split operation runs, there's no longer a selected NEXT USED filegroup. 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.Explicitly assign the filegroup as the NEXT USED filegroup by using ALTER PARTITION SCHEME or an upcoming split operation will fail.

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.Limitations with columnstore index: Only empty partitions can be split in when a columnstore index exists on the table. Tendrá que quitar o deshabilitar el índice de almacén de columnas antes de realizar esta operación.You will need to drop or disable the columnstore index before performing this operation.

MERGE [ RANGE ( boundary_value) ]MERGE [ RANGE ( boundary_value) ]
Quita una partición y combina cualquier valor que exista en la partición en una de las particiones restantes.Drops a partition and merges any values that exist in the partition into a remaining partition. RANGE (boundary_value) debe ser un valor de límite existente, en el que se combinan los valores de la partición quitada.RANGE (boundary_value) must be an existing boundary value, into which the values from the dropped partition are merged. 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.This argument removes the filegroup that originally held boundary_value from the partition scheme unless a remaining partition uses it, or marks it with the NEXT USED property. La partición combinada se encuentra en el grupo de archivos que originalmente no contenía boundary_value.The merged partition exists in the filegroup that didn't hold boundary_value at first. 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).boundary_value is a constant expression that can reference variables (including user-defined type variables) or functions (including user-defined functions). No puede hacer referencia a una expresión de Transact-SQLTransact-SQL.It can't reference a Transact-SQLTransact-SQL expression. 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.boundary_value must either match or be implicitly convertible to the data type of its corresponding partitioning column. 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.You also can't truncate boundary_value during implicit conversion in a way that the size and scale of the value doesn't match that of its corresponding 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.Limitations with columnstore index: Two nonempty partitions containing a columnstore index can't be merged. Tendrá que quitar o deshabilitar el índice de almacén de columnas antes de realizar esta operación.You will need to drop or disable the columnstore index before performing this operation

Procedimientos recomendadosBest Practices

Mantenga siempre las particiones vacías en ambos extremos del rango de partición.Always keep empty partitions at both ends of the partition range. 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.Keep the partitions at both ends to guarantee that the partition split and the partition merge don't incur any data movement. La división de particiones se produce al principio y la combinación de particiones, al final.The partition split occurs at the beginning and the partition merge occurs at the end. Evite dividir o combinar particiones con datos.Avoid splitting or merging populated partitions. Dividir o combinar particiones con datos puede ser ineficaz,Splitting or merging populated partitions can be inefficient. ya que puede multiplicar por cuatro la generación de registros y causar bloqueos graves.They can be inefficient because the split or merge may cause as much as four times more log generation, and may also cause severe locking.

Limitaciones y restriccionesLimitations and Restrictions

ALTER PARTITION FUNCTION vuelve a crear particiones en cualquier tabla o índice que utilice la función en una única operación atómica.ALTER PARTITION FUNCTION repartitions any tables and indexes that use the function in a single atomic operation. Sin embargo, esta operación se produce sin conexión, y dependiendo del alcance de las reparticiones puede consumir muchos recursos.However, this operation occurs offline, and depending on the extent of repartitioning, may be resource-intensive.

ALTER PARTITION FUNCTION se puede utilizar solamente para dividir una partición en dos o combinar dos particiones en una.Only use ALTER PARTITION FUNCTION for splitting one partition into two, or merging two partitions into one. 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.To change the way a table is otherwise partitioned (for example, from 10 partitions to five partitions), exercise any of the following options. Dependiendo de la configuración del sistema, estas opciones pueden tener un consumo de recursos diferente:Depending on the configuration of your system, these options may vary in resource consumption:

  • Cree una tabla con particiones con la función de partición necesaria.Create a new partitioned table with the necessary partition function. A continuación, inserte los datos de la tabla antigua en la nueva utilizando la instrucción INSERT INTO...SELECT FROM.Then, insert the data from the old table into the new table by using an INSERT INTO...SELECT FROM statement.

  • Cree un índice clúster con particiones en un montón.Create a partitioned clustered index on a heap.

    Nota

    El resultado de quitar un índice clúster con particiones es un montón con particiones.Dropping a partitioned clustered index results in a partitioned heap.

  • Quite y vuelva a generar un índice con particiones existente mediante la instrucción CREATE INDEX de Transact-SQLTransact-SQL con la cláusula DROP EXISTING = ON.Drop and rebuild an existing partitioned index by using the Transact-SQLTransact-SQL CREATE INDEX statement with the DROP EXISTING = ON clause.

  • Ejecute una secuencia de instrucciones ALTER PARTITION FUNCTION.Run a sequence of ALTER PARTITION FUNCTION statements.

Todos los grupos de archivos que estén afectados por ALTER PARTITION FUNCTION deben estar en línea.All filegroups that are affected by ALTER PARTITION FUNCTION must be online.

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.ALTER PARTITION FUNCTION fails when a disabled clustered index exists on any tables that use the partition function.

SQL ServerSQL Server no proporciona compatibilidad de replicación para modificar una función de partición.doesn't provide replication support for modifying a partition function. 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.Changes to a partition function in the publication database must be manually applied in the subscription database.

PermisosPermissions

Se pueden utilizar cualquiera de los siguientes permisos para ejecutar ALTER PARTITION FUNCTION:Any one of the following permissions can be used to execute ALTER PARTITION FUNCTION:

  • Permiso ALTER ANY DATASPACE.ALTER ANY DATASPACE permission. 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 .This permission defaults to members of the sysadmin fixed server role and the db_owner and db_ddladmin fixed database roles.

  • Permiso CONTROL o ALTER en la base de datos en la que se ha creado la función de partición.CONTROL or ALTER permission on the database in which the partition function was created.

  • 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.CONTROL SERVER or ALTER ANY DATABASE permission on the server of the database in which the partition function was created.

EjemplosExamples

A.A. Dividir una partición de una tabla o un índice con particiones en dos particionesSplitting a partition of a partitioned table or index into two partitions

En el ejemplo siguiente se crea una función de partición para crear cuatro particiones en una tabla o en un índice.The following example creates a partition function to partition a table or index into four partitions. ALTER PARTITION FUNCTION divide una de las particiones en dos para crear un total de cinco particiones.ALTER PARTITION FUNCTION splits one of the partitions into two to create a total of five partitions.

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.B. Mezclar dos particiones de una tabla con particiones en una particiónMerging two partitions of a partitioned table into one partition

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.The following example creates the same partition function as above, and then merges two of the partitions into one partition, for a total of three partitions.

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énSee Also

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