Microsoft KB Archive/309400

From BetaArchive Wiki
Knowledge Base


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
----------------------------------------------------------------------

#355551            Merge metadata cleanup (either using retention-based 
                   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.


#354850            When the merge replication reconciler cannot apply an
                   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.



#354716            When SQL Server localizes interrupted generations, 
                   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.



#353578            Local subscribers can encounter merge non-convergence
                   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 "metadata proxying," 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.
                

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.

REFERENCES

For additional information other merge replication non-convergence fixes in SQL Server 2000 Service Pack 2, click the article numbers below to view the articles in the Microsoft Knowledge Base:

304703 FIX: Pull Subscribers Experience Non-Convergence After Running sp_mergecleanupmetadata Against a Published Database


304222 FIX: Merge Replication Non-Convergence Occurs with Local Subscribers when Published Table has 32 or More Columns


Keywords: kbbug kbfix KB309400