Agrupar cambios en filas relacionadas con registros lógicosGroup Changes to Related Rows with Logical Records

Se aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) Se aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions)

Nota

Esta característica se quitará en una versión futura de Microsoft SQL Server.This feature will be removed in a future version of Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

De manera predeterminada, la replicación de mezcla procesa los cambios de datos fila por fila.By default, merge replication processes data changes on a row-by-row basis. Esto es apropiado en muchos casos, pero para algunas aplicaciones, es fundamental que las filas relacionadas se procesen como una unidad.In many circumstances this is appropriate, but for some applications, it is essential that related rows be processed as a unit. La característica de registros lógicos de la replicación de mezcla permite definir una relación entre filas relacionadas de diferentes tablas, para que las filas se procesen como una unidad.The logical records feature of merge replication allows you to define a relationship between related rows in different tables so that the rows are processed as a unit.

Nota

La característica de registros lógicos se puede utilizar sola o con los filtros de combinación.The logical records feature can be used alone or in conjunction with join filters. Para obtener más información acerca de los filtros de combinación, vea Join Filters.For more information about join filters, see Join Filters. Para utilizar los registros lógicos, el nivel de compatibilidad de la publicación debe ser de al menos 90RTM.To use logical records, the compatibility level of the publication must be at least 90RTM.

Considere estas tres tablas relacionadas:Consider these three related tables:

Tres registros lógicos de tabla, solo con los nombres de columnaThree table logical record, with column names only

La tabla Customers es la tabla primaria en esta relación y tiene una columna de clave principal, CustID.The Customers table is the parent table in this relationship and has a primary key column CustID. La tabla Orders tiene una columna de clave principal, OrderID, con una restricción de clave externa en la columna CustID que hace referencia a la columna CustID de la tabla Customers .The Orders table has a primary key column OrderID, with a foreign key constraint on the CustID column that references the CustID column in the Customers table. De la misma forma, la tabla OrderItems tiene una columna de clave principal, OrderItemID, con una restricción de clave externa en la columna OrderID que hace referencia a la columna OrderID de la tabla Orders .Similarly, the OrderItems table has a primary key column OrderItemID, with a foreign key constraint on the OrderID column that references the OrderID column in the Orders table.

En este ejemplo, un registro lógico está formado por todas las filas de la tabla Orders relacionadas con un solo valor CustID y todas las filas de la tabla OrderItems relacionadas con esas filas en la tabla Orders .In this example, a logical record consists of all the rows in the Orders table that are related to a single CustID value and all of the rows in the OrderItems table that are related to those rows in the Orders table. En este diagrama se muestran todas las filas de las tres tablas que se incluyen en el registro lógico para Customer2:This diagram shows all the rows in the three tables that are in the logical record for Customer2:

Tres registros lógicos de tabla con valoresThree table logical record with values

Para definir una relación lógica entre artículos, vea Definir una relación de registros lógicos entre artículos de tabla de mezcla.To define a logical record relationship between articles, see Define a Logical Record Relationship Between Merge Table Articles.

Ventajas de los registros lógicosBenefits of Logical Records

La característica de registros lógicos tiene dos ventajas principales:The logical records feature has two primary benefits:

  • Los cambios de datos se aplican como una unidad.Application of data changes as a unit.

  • Los conflictos se detectan y resuelven simultáneamente en varias filas de varias tablas.The detection and resolution of conflicts simultaneously on multiple rows from multiple tables.

Aplicación de cambios como una unidadThe Application of Changes As a Unit

Si se utilizan registros lógicos y se interrumpe el proceso de mezcla, como ocurre en el caso de que se termine la conexión, se revierte el conjunto de cambios relacionados replicados parcialmente.If merge processing is interrupted, such as in the case of a dropped connection, the partially completed set of related replicated changes is rolled back if logical records are used. Por ejemplo, considere el caso en el que un suscriptor agrega un nuevo pedido con OrderID = 6 y dos filas nuevas a la tabla OrderItems con OrderItemID = 10 y OrderItemID = 11 para OrderID = 6.For example, consider the case where a Subscriber adds a new order with OrderID = 6 and two new rows in the OrderItems table with OrderItemID = 10 and OrderItemID = 11 for OrderID = 6.

Tres registros lógicos de tabla con valoresThree table logical record with values

Si no se utilizan registros lógicos y el proceso de replicación se interrumpe después de finalizar la fila Orders para OrderID = 6 pero antes de finalizar OrderItems 10 y 11, el valor de OrderTotal para OrderID = 6 no será coherente con la suma de los valores OrderAmount de las filas OrderItems .If the replication process is interrupted after the Orders row for OrderID = 6 is complete, but before the OrderItems 10 and 11 are completed, and logical records are not used, the OrderTotal value for OrderID = 6 will not be consistent with the sum of the OrderAmount values for the OrderItems rows. Si se utilizan registros lógicos, la fila Orders para OrderID = 6 no se confirma hasta que se repliquen los cambios de OrderItems relacionados.If logical records are used, the Orders row for OrderID = 6 is not committed until the related OrderItems changes are replicated.

En un escenario distinto, si se utilizan registros lógicos y alguien está consultando las tablas cuando el proceso de mezcla está aplicando cambios, el usuario no verá los cambios parcialmente replicados hasta que finalicen.In a different scenario, if logical records are used, and someone is querying tables when the merge process is applying changes, the user will not see the partially replicated changes until they are all complete. Por ejemplo, el proceso de replicación ha cargado la fila Orders para OrderID = 6, pero un usuario consulta las tablas antes de que el proceso de replicación haya replicado las filas OrderItems . En este caso, el valor OrderTotal no será igual a la suma de los valores OrderAmount .For example, the replication process has uploaded the Orders row for OrderID = 6, but a user queries the tables before the replication process has replicated the OrderItems rows, the OrderTotal value would not be the same as the sum of the OrderAmount values. Si se utilizan registros lógicos, la fila Orders no estará visible hasta que finalicen las filas OrderItems y la transacción se confirme como una unidad.If logical records are used, the Orders row would not be visible until the OrderItems rows are complete and the transaction has been committed as a unit.

Aplicación del control de conflictos a más de una tablaThe Application of Conflict Handling to More Than One Table

Considere el caso en el que dos suscriptores tienen el conjunto de datos anterior:Consider the case where two Subscribers have the data set above:

  • Un usuario del primer suscriptor cambia OrderAmount de OrderItemID 5 de 100 a 150 y OrderTotal de OrderID 3 de 200 a 250.A user at the first Subscriber changes the OrderAmount of OrderItemID 5 from 100 to 150 and the OrderTotal of OrderID 3 from 200 to 250.

  • Un usuario del segundo suscriptor cambia OrderAmount de OrderItemID 6 de 25 a 125 y OrderTotal de OrderID 3 de 200 a 300.A user at the second Subscriber changes the OrderAmount of OrderItemID 6 from 25 to 125 and the OrderTotal of OrderID 3 from 200 to 300.

Si estos cambios se replican sin utilizar registros lógicos, los diferentes valores de OrderTotal producirán un conflicto y solo se replicará uno de ellos.If these changes are replicated without using logical records, the different OrderTotal values would result in a conflict and only one of them would be replicated. Sin embargo, los cambios que no tengan conflictos en la tabla OrderItems se replicarán sin conflictos, lo que dejará los valores finales de OrderTotal en un estado incoherente respecto a las filas OrderItems .But the non-conflicting changes in the OrderItems table would be replicated without conflict, leaving the final OrderTotal values in an inconsistent state with respect to the OrderItems rows. Si se utilizan registros lógicos en este escenario, también se revertirá el cambio de OrderItems asociado a la tabla Orders perdedora y el valor final de OrderTotal será un resumen exacto de las filas OrderItems .If logical records are used in this scenario, the OrderItems change associated with the losing Orders table change would also be rolled back, and the final OrderTotal value would be an accurate summary of the OrderItems rows.

Para obtener más información sobre las opciones relacionadas con la detección y resolución de conflictos con registros lógicos, vea Detectar y solucionar conflictos en registros lógicos.For more information about options related to conflict detection and resolution with logical records, see Detecting and Resolving Conflicts in Logical Records.

Consideraciones para el uso de registros lógicosConsiderations for Using Logical Records

Tenga en cuenta las consideraciones siguientes al utilizar registros lógicos:Keep the following considerations in mind when using logical records.

Consideraciones generalesGeneral Considerations

  • Se recomienda mantener el menor número de tablas posible en un registro lógico; se recomienda utilizar cinco tablas o menos.It is recommended that you keep the number of tables in a logical record as low as possible; five tables or less is recommended.

  • Los registros lógicos no pueden hacer referencia a columnas con ninguno de los siguientes tipos de datos:Logical records cannot reference columns with any of the following data types:

    • varchar(max) y nvarchar(max)varchar(max) and nvarchar(max)

    • varbinary(max)varbinary(max)

    • text y ntexttext and ntext

    • imageimage

    • XMLXML

    • UDTUDT

  • Las relaciones de clave externa en las tablas publicadas no se pueden definir con la opción CASCADE.Foreign key relationships in published tables cannot be defined with the CASCADE option. Para obtener más información, vea CREATE TABLE (Transact-SQL) y ALTER TABLE (Transact-SQL).For more information, see CREATE TABLE (Transact-SQL) and ALTER TABLE (Transact-SQL).

  • No puede actualizar columnas que se utilicen en una cláusula de relación lógica.You cannot update any columns that are used in the logical relation clause.

  • No se admite la resolución de conflictos personalizada con controladores de lógica de negocios o solucionadores personalizados para los artículos incluidos en un registro lógico.Custom conflict resolution with business logic handlers or custom resolvers is not supported for articles that are included in a logical record.

  • Si se utilizan registros lógicos en una publicación que incluye filtros con parámetros, debe inicializar cada suscripción con una instantánea para su partición.If logical records are used in a publication that includes parameterized filters, you must initialize each Subscriber with a snapshot for its partition. Si inicializa un suscriptor con otro método, se producirá un error en el Agente de mezcla.If you initialize a Subscriber with another method, the Merge Agent will fail. Para más información, consulte Instantáneas para publicaciones de combinación con filtros con parámetros.For more information, see Snapshots for Merge Publications with Parameterized Filters.

  • Los conflictos que implican registros lógicos no se muestran en el Visor de conflictos.Conflicts that involve logical records are not displayed in Conflict Viewer. Para ver información acerca de estos conflictos, utilice procedimientos almacenados de replicación.To view information about these conflicts, use replication stored procedures. Para obtener más información, vea Ver información de conflictos para publicaciones de mezcla (programación de la replicación con Transact-SQL).For more information, see View Conflict Information for Merge Publications (Replication Transact-SQL Programming).

Configuración de publicacionesPublication Settings

  • La publicación debe tener un nivel de compatibilidad igual o superior a 90RTM.The publication must have a compatibility level of 90RTM or greater. Para obtener más información, vea la sección sobre el nivel de compatibilidad de las publicaciones en el tema Replication Backward Compatibility(Compatibilidad con versiones anteriores de replicación).For more information, see the "Publication Compatibility Level" section of Replication Backward Compatibility.

  • La publicación debe utilizar un modo de instantánea nativo.The publication must use native snapshot mode. Ésta es la opción predeterminada, a menos que esté replicando en SQL Server CompactSQL Server Compact, que no admite registros lógicos.This is the default unless you are replicating to SQL Server CompactSQL Server Compact, which does not support logical records.

  • La publicación no permite la sincronización web.The publication cannot allow Web synchronization. Para obtener más información acerca de la sincronización web, vea Web Synchronization for Merge Replication.For more information about Web synchronization, see Web Synchronization for Merge Replication.

  • Para utilizar registros lógicos en una publicación filtrada:In order to use logical records on a filtered publication:

  • Si la publicación utiliza filtros de combinación, debe establecer la propiedad join unique key en true para todos los filtros de combinación involucrados en relaciones de registros lógicos.If the publication uses join filters, the join unique key property must be set to true for all join filters that are involved in logical record relationships. Para obtener más información, consulte Join Filters.For more information, see Join Filters.

Relaciones entre tablasRelationships Between Tables

  • Las tablas relacionadas a través de registros lógicos deben tener una relación clave principal-clave externa.Tables related through logical records must have a primary key-foreign key relationship.

  • No se puede establecer la opción NOT FOR REPLICATION para restricciones de clave externa.The NOT FOR REPLICATION option cannot be set for foreign key constraints.

  • Las tablas secundarias solo pueden tener una tabla primaria.Child tables can have only one parent table.

    Por ejemplo. una base de datos que realice un seguimiento de las clases y los estudiantes puede tener un diseño similar al siguiente:For example, a database tracking classes and students might have a design similar to:

    Tabla secundaria con más de una tabla primariaChild table with more than one parent table

    No puede utilizar un registro lógico para representar las tres tablas en esta relación, ya que las filas de ClassMembers no están asociadas con una sola fila de clave principal.You cannot use a logical record to represent the three tables in this relationship, because the rows in ClassMembers are not associated with a single primary key row. Las tablas Classes y ClassMembers pueden formar un registro lógico, al igual que las tablas ClassMembers y Students, pero no las tres juntas.The tables Classes and ClassMembers could still form a logical record, as could the tables ClassMembers and Students, but not all three.

  • La publicación no puede contener relaciones circulares de filtros de combinación.The publication cannot contain circular join filter relationships.

    Siguiendo el ejemplo de las tablas Customers, Ordersy OrderItems, no puede utilizar registros lógicos si la tabla Orders también tiene una restricción de clave externa que hace referencia a la tabla OrderItems .Using the example with the tables Customers, Orders, and OrderItems, you could not use logical records if the Orders table also had a foreign key constraint that referenced the OrderItems table.

Consecuencias de los registros lógicos en el rendimientoPerformance implications of logical records

La característica de registros lógicos tiene un costo en rendimiento.The logical record feature does come with a performance cost. Si no se utilizan registros lógicos, el agente de replicación puede procesar todos los cambios para un artículo determinado a la vez, y como los cambios se aplican fila por fila, los requisitos de bloqueo y registro de transacciones necesarios para aplicar los cambios son mínimos.If logical records are not used, the replication agent can process all of the changes for a given article at the same time, and because the changes are applied in a row-by-row fashion, the locking and transaction log requirements necessary for applying the changes are minimal.

Si se utilizan registros lógicos, el Agente de mezcla debe procesar juntos los cambios de todo el registro lógico.If logical records are used, the Merge Agent must process the changes for each entire logical record together. Esto afecta al tiempo que tarda el Agente de mezcla en replicar las filas.This has an effect on the amount of time it takes the Merge Agent to replicate the rows. Además, como el agente abre una transacción distinta para cada registro lógico, los requisitos de bloqueo pueden aumentar.Additionally, because the agent opens a separate transaction for each logical record, locking requirements can increase.

Consulte tambiénSee Also

Opciones de artículos para replicación de mezclaArticle Options for Merge Replication