Replicar tablas e índices con particiones

Se aplica a:SQL ServerAzure SQL Managed Instance

La creación de particiones facilita el uso de tablas o índices grandes, ya que permite administrar y tener acceso a subconjuntos de datos de forma rápida y eficaz, y mantener la integridad de una recopilación de datos al mismo tiempo. Para obtener más información, vea Partitioned Tables and Indexes. La replicación es compatible con la creación de particiones al proporcionar un conjunto de propiedades que especifican cómo se deben tratar las tablas y los índices con particiones.

Propiedades de artículos para la replicación transaccional y de mezcla

En la tabla siguiente se enumeran los objetos que se utilizan para la partición de datos.

Objeto Creado utilizando
Tabla o índice con particiones CREATE TABLE o CREATE INDEX
Función de partición CREATE PARTITION FUNCTION
Esquema de partición CREATE PARTITION SCHEME

Las propiedades relacionadas con la creación de particiones son las opciones de esquema de artículo que determinan si las particiones de los objetos se deben copiar en el suscriptor. Establece estas opciones de esquema de las siguientes maneras:

  • En la página Propiedades del artículo del Asistente para nueva publicación o en el cuadro de diálogo Propiedades de la publicación. Para copiar los objetos enumerados en la tabla anterior, especifique el valor true para las propiedades Copiar esquemas de particionamiento de tabla y Crear esquemas de particionamiento de índice. Para obtener más información sobre cómo acceder a la página Propiedades del artículo, vea Ver y modificar propiedades de publicación.

  • Utilizando el parámetro schema_option de uno de los procedimientos almacenados siguientes:

    Para copiar los objetos enumerados en la tabla anterior, especifique los valores de opciones de esquema adecuados. Para obtener información sobre cómo especificar opciones de esquema, vea Specify Schema Options.

La replicación copia los objetos al suscriptor durante la sincronización inicial. Si el esquema de partición utiliza grupos de archivos distintos del archivo de grupos PRIMARY, esos grupos de archivos deben existir en el suscriptor antes de la sincronización inicial.

Una vez inicializado el suscriptor, los cambios en los datos se propagan al suscriptor y se aplican a las particiones correspondientes. Sin embargo, no se admiten cambios en el esquema de partición. La replicación transaccional y la fusión no soportan replicar los siguientes comandos: ALTER PARTITION FUNCTION, ALTER PARTITION SCHEME, ni la instrucción REBUILD WITH PARTITION de ALTER INDEX. Los cambios asociados a ellos no se replican automáticamente al Suscriptor. Necesitas hacer cambios similares manualmente en el Suscriptor.

Soporte de replicación para la conmutación de particiones

Una de las ventajas principales de crear particiones en una tabla es la posibilidad de mover rápida y eficazmente subconjuntos de datos entre particiones. Usa el SWITCH PARTITION comando para mover datos. Por defecto, cuando activas una tabla para replicar, el sistema bloquea SWITCH PARTITION las operaciones por las siguientes razones:

  • Si mueves datos dentro o fuera de una tabla que existe en el Publisher pero no existe en el Suscriptor, el Publisher y el Suscriptor podrían volverse inconsistentes entre sí. Este problema suele ocurrir cuando se mueven datos dentro o fuera de una tabla de staging.

  • Si el Suscriptor tiene una definición diferente para la tabla particionada que el Publisher, el Agente de distribución falla al intentar aplicar cambios en el Suscriptor.

A pesar de estos posibles problemas, puedes habilitar el cambio de particiones para replicar transaccionalmente. Antes de habilitar el cambio de particiones, asegúrate de que todas las tablas implicadas en el cambio de particiones existen en el Publisher y el Subscriber, y que las definiciones de tabla y partición sean las mismas.

Cuando las particiones tienen exactamente el mismo esquema de partición en los publicadores y en los suscriptores, puede activar allow_partition_switch junto con replication_partition_switch, con lo que solo se replicará la instrucción de conmutación de particiones en el suscriptor. También puede activar allow_partition_switch sin replicar el DDL. Esto resulta útil en el caso en que desee distribuir los meses anteriores de la partición pero mantener la partición replicada para otro año a efectos de copia de seguridad en el suscriptor.

Si habilita el cambio de partición en SQL Server 2008 R2 a través de la versión actual, es posible que también necesite operaciones de división y combinación en un futuro próximo. Antes de ejecutar una operación de división o fusión en una tabla replicada o habilitada por CDC, asegúrate de que la partición en cuestión no tenga ningún comando replicado pendiente. También debe asegurarse de que no se ejecuten operaciones DML en la partición durante las operaciones de división y combinación. Si hay transacciones que el lector de registros o el trabajo de captura CDC no procesaron, o si realizas operaciones DML en una partición de una tabla replicada o habilitada por CDC mientras se ejecuta una operación de división o fusión (involucrando la misma partición), podría provocar un error de procesamiento (error 608 - No se encontró entrada de catálogo para el ID de la partición) con el agente lector de registro o el trabajo de captura CDC. Para corregir el error, puede que necesites reiniciar la suscripción o desactivar el CDC en esa tabla o base de datos.

Escenarios no compatibles

Los siguientes escenarios no se soportan cuando se utiliza replicación con cambio de particiones:

Replicación punto a punto
La replicación "peer-to-peer" no se admite con el cambio de partición.

Uso de variables con conmutación de particiones

No se soporta el uso de variables con cambio de particiones en tablas publicadas con replicación transaccional o Change Data Capture (CDC) para la ALTER TABLE ... SWITCH TO ... PARTITION ... sentencia.

Por ejemplo, el siguiente código de conmutación de particiones no funciona con CDC habilitado en la base de datos ni si TableA participa en una publicación transaccional:

DECLARE @SomeVariable INT = $PARTITION.pf_test(10);
ALTER TABLE dbo.TableA
SWITCH TO dbo.TableB 
PARTITION @SomeVariable;

En su lugar, cambia tu partición usando directamente la función de partición, como en el siguiente ejemplo:

ALTER TABLE NonPartitionedTable 
SWITCH TO PartitionedTable PARTITION $PARTITION.pf_test(10);

Habilitación del cambio de particiones

Las siguientes propiedades para publicaciones transaccionales permiten controlar el comportamiento del cambio de particiones en un entorno replicado:

  • @allow_partition_switch: Cuando se configura en true, puedes ejecutar SWITCH PARTITION en la base de datos de publicación.

  • @replicate_partition_switch: Determina si se replica la instrucción DDL SWITCH PARTITION a los suscriptores. Esta opción solo es válida cuando @allow_partition_switch se establece en true.

Establece estas propiedades usando sp_addpublication cuando crees la publicación, o usando sp_changepublication después de crear la publicación. Como se mencionó antes, la replicación de fusión no soporta el cambio de particiones. Para ejecutar SWITCH PARTITION en una tabla habilitada para la replicación de mezcla, elimina la tabla de la publicación.