Modificar una función de partición

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Puede cambiar el modo en que se crean las particiones de una tabla o un índice en SQL Server, Azure SQL Database y Azure SQL Managed Instance al sumar o restar el número de particiones especificadas, en aumentos de 1, en la función de partición de la tabla o el índice con particiones mediante Transact-SQL. Lo que sucede al agregar una partición es que se "divide" una partición existente en dos particiones y se vuelven a definir los límites de las particiones nuevas. Al quitar una partición, se "mezclan" los límites de dos particiones en una sola. Lo que hace esta última acción es volver a llenar una partición y dejar la otra sin asignar. Revise los procedimientos recomendados antes de modificar una función de partición.

Precaución

Varias tablas o índices pueden utilizar la misma función de partición. Cuando se modifica una función de partición, afecta a todas las funciones en una sola transacción. Compruebe las dependencias de la función de partición antes de modificarla.

La creación de particiones de tablas también está disponible en grupos de SQL dedicados en Azure Synapse Analytics, con algunas diferencias de sintaxis. Obtenga más información en Creación de particiones de tablas en un grupo de SQL dedicado.

Limitaciones

  • ALTER PARTITION FUNCTION solo se puede utilizar para dividir en dos una partición o para mezclar dos particiones en una sola. Para cambiar el modo en que se crean las particiones de una tabla o un índice (de 10 a 5 particiones, por ejemplo) puede recurrir a cualquiera de las opciones que se indican a continuación:

    • Cree una nueva tabla con particiones con la función de partición deseada y, a continuación, inserte los datos de la tabla antigua en la tabla nueva mediante la instrucción INSERT INTO... SELECT FROM de Transact-SQL o con el Asistente para administrar particiones en SQL Server Management Studio (SSMS).

    • Cree un índice agrupado 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.

  • El motor de base de datos no proporciona compatibilidad de replicación para modificar una función de partición. Si desea realizar cambios en una función de partición de una base de datos de publicación, deberá hacerlo manualmente en la base de datos de suscripciones.

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

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.

Consulta de objetos particionados en una base de datos

En la consulta siguiente se enumeran todos los objetos con particiones de una base de datos. Esto se puede usar para comprobar las dependencias de una función de partición antes de modificarla.

SELECT 
	PF.name AS PartitionFunction,
	ds.name AS PartitionScheme,
    OBJECT_SCHEMA_NAME(si.object_id) as SchemaName,
	OBJECT_NAME(si.object_id) AS PartitionedTable, 
	si.name as IndexName
FROM sys.indexes AS si
JOIN sys.data_spaces AS ds
	ON ds.data_space_id = si.data_space_id
JOIN sys.partition_schemes AS PS
	ON PS.data_space_id = si.data_space_id
JOIN sys.partition_functions AS PF
	ON PF.function_id = PS.function_id
WHERE ds.type = 'PS'
AND OBJECTPROPERTYEX(si.object_id, 'BaseType') = 'U'
ORDER BY PartitionFunction, PartitionScheme, SchemaName, PartitionedTable;

División de una partición con Transact-SQL

  1. Conéctese a la base de datos de destino en el Explorador de objetos.

  2. En la barra Estándar, seleccione Nueva consulta.

  3. Copie y pegue el ejemplo siguiente en la ventana de consulta y seleccione Ejecutar.

    Este ejemplo:

    • Comprueba si hay una versión anterior de la función de partición myRangePF1 y la elimina si se encuentra.
    • Crea una función de partición denominada myRangePF1 que crea particiones de una tabla en cuatro particiones.
    • Divide la partición entre boundary_values 100 y 1000 para crear una partición entre boundary_values 100 y 500 y una partición entre boundary_values 500 y 1000.
    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  
    
    ALTER PARTITION FUNCTION myRangePF1 ()  
    SPLIT RANGE (500);  
    

Combinación de dos particiones con Transact-SQL

  1. Conéctese a la base de datos de destino en el Explorador de objetos.

  2. En la barra Estándar, seleccione Nueva consulta.

  3. Copie y pegue el ejemplo siguiente en la ventana de consulta y seleccione Ejecutar.

    Este ejemplo:

    • Comprueba si existe una versión anterior de la función de partición myRangePF1 y la elimina si se encuentra.
    • Crea una función de partición denominada myRangePF1 con tres valores de límite, lo que dará como resultado cuatro particiones.
    • Combina la partición entre boundary_values 1 y 100 con la partición entre boundary_values 100 y 1000.
    • Esto da como resultado que la función de partición myRangePF1 tenga dos puntos de límite, 1 y 1000.
    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  
    
    ALTER PARTITION FUNCTION myRangePF1 ()  
    MERGE RANGE (100);  
    

Eliminación de una función de partición con SSMS

  1. Conéctese a la base de datos de destino en el Explorador de objetos.

  2. Expanda la base de datos donde desea eliminar la función de partición y después expanda la carpeta Almacenamiento .

  3. Expanda la carpeta de Funciones de partición .

  4. Haga clic con el botón derecho en la función de partición que quiera eliminar y seleccione Eliminar.

  5. En el cuadro de diálogo Eliminar objeto , asegúrese de que está seleccionada la función de partición correcta y después seleccione Aceptar.

Pasos siguientes

Obtenga más información sobre los conceptos relacionados en los artículos siguientes: