Microsoft KB Archive/309400

= FIX: Merge Replication Non-Convergence Fixes in SQL Server 2000 SP2 =

Article ID: 309400

Article Last Modified on 10/3/2003

-

APPLIES TO


 * Microsoft SQL Server 2000 Service Pack 3a
 * Microsoft SQL Server 2000 Service Pack 1

-



This article was previously published under Q309400



BUG #: 355551 (SHILOH_BUGS)

BUG #: 354850 (SHILOH_BUGS)

BUG #: 354716 (SHILOH_BUGS)

BUG #: 353578 (SHILOH_BUGS)



SYMPTOMS
Under some circumstances, you may find that changes have not replicated properly to some replicas in a merge replication topology, a state known as non-convergence. This article documents some merge replication non-convergence problems in SQL Server 2000 that have been corrected in SQL Server 2000 Service Pack 2.



CAUSE
Here is a list of the SQL Server 2000 non-convergence issues that are fixed by SQL Server 2000 Service Pack 2: Bug Number            Description --

cleanup introduced in SQL Server 2000 Service Pack 1 or using the old-style metadata cleanup through the sp_mergecleanupmetatdata stored procedure) on one side                   of a replication topology (that is, at either the publisher or the subscriber, but not both), followed by                   an update of a row on the side that was not cleaned                     up can result in non-convergence. This problem only                        occurs when the article in question is using                    column-level conflict tracking, which is the default.
 * 1) 355551           Merge metadata cleanup (either using retention-based

update at the destination replica, and SQL Server retries the update operation, non-convergence can result. The lineage and COLV metadata in the MSmerge_contents table at the source and destination replicas is the same.
 * 1) 354850           When the merge replication reconciler cannot apply an

changes to rows in the MSmerge_genhistory and MSmerge_contents table are made in separate transactions. If another Merge Agent enumerates changes between these transaction boundaries, the Merge Agent incorrectly assumes that the generation was received at the destination, resulting in non- convergence.
 * 1) 354716           When SQL Server localizes interrupted generations,

under stress conditions. The Merge Agent (using an                  extended stored procedure) reads merge metadata for a                    particular row, caches that metadata, makes changes to                    the metadata during &quot;metadata proxying,&quot; and then writes that metadata back to the destination replica. If a                   subscriber makes a change to the merge metadata in the small window that exists before the modified metadata is written to the destination replica, non-convergence can result.
 * 1) 353578           Local subscribers can encounter merge non-convergence



RESOLUTION
To resolve this problem, obtain the latest service pack for Microsoft SQL Server 2000. For additional information, click the following article number to view the article in the Microsoft Knowledge Base:

290211 INF: How to Obtain the Latest SQL Server 2000 Service Pack



WORKAROUND
Here are two methods that you can use to work around this problem:  In many cases, you can alleviate problems with merge replication non-convergence through dummy updates. This simply entails updating a particular row so that you update all of the columns in the row to themselves. To merge replication, this updates the metadata kept in the merge system tables, making the row eligible for replication during the next merge session.

 In other cases, you can use the -ForceConvergenceLevel merge agent parameter to work around non-convergence problems. For more information about the use of -ForceConvergenceLevel, see the following article in the Microsoft Knowledge Base:

305039 INF: -ForceConvergenceLevel Merge Agent Parameter is not Documented





STATUS
Microsoft has confirmed that this is a problem in Microsoft SQL Server 2000. This problem was first corrected in Microsoft SQL Server 2000 Service Pack 2.