在发布服务器上修改更新设置为Singleton update,这个问题没有再重现,sql如下:
dbcc traceon (8207,-1)
DBCC TRACESTATUS(-1)
dbcc traceon (8207,-1)
DBCC TRACESTATUS(-1)
This article was previously published under Q302341
On This Page
SUMMARY
If you update any column that is part of a unique or clustered index, SQL Server...
If you update any column that is part of a unique or clustered index, SQL Server implements the update as a deferred update. A deferred update means that the UPDATE is sent to the Subscriber as a pair of DELETE and INSERT operations. A deferred update is described in more detail in the following Microsoft Knowledge Base article:
238254
(http://support.microsoft.com/kb/238254/EN-US/ ) INF: UPDATE Statements May be Replicated as DELETE/INSERT Pairs
Organizations may find that sending updates to subscribers as DELETE and INSERT operations does not meet their business needs. For example, business rules might require update triggers to fire at the Subscriber. To accommodate these situations a new trace flag, 8207, is introduced in SQL Server 2000 Service Pack 1, which enables singleton updates for Transactional Replication. An update to a unique column that affects only one row (a singleton update) is replicated as an UPDATE and not as a DELETE or INSERT pair. If the update affects multiple rows, the update is still replicated as a DELETE or INSERT pair.
MORE INFORMATION
You can enable trace flag 8207 on the publishing server by using either of the f...
You can enable trace flag 8207 on the publishing server by using either of the following methods:
Important: Typically, you use trace flag 8207 with read-only transactional replication. Do not use trace flag 8207 with updatable subscriptions if:
- Run the following code from the SQL Server Query Analyzer:
DBCC TRACEON (8207, -1)
-or-
- If you want to have the 8207 trace flag set ON permanently, then:
- Stop the MSSQLServer service.
- Add -T8207 to the startup parameters. To add -T8207, from SQL Enterprise Manager:
- Right-click the server name, and then click Properties.
- In the Properties dialog box, click the General tab, and then clickStartup Parameters.
- Add the trace flag.
- Start the MSSQLServer service.
Important: Typically, you use trace flag 8207 with read-only transactional replication. Do not use trace flag 8207 with updatable subscriptions if:
- A primary key update can occur at the subscriber.
- An update to a column that is included in a unique constraint can occur at the subscriber.
- An update to a column that is included in a unique index can occur at the subscriber.
REFERENCES
For more information, refer to the "Trace Flags" and the "Using Startup Options" topics in SQL Server Books Online. Keywords: | kbbug kbfix kbinfo kbsqlserv2000sp1fix KB302341 |
SQL 2000 -> 2005 transactional replication, LOG Reader behavior changed?
Answers
All Replies
具体参考:
http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/q302/3/41.ASP&NoWebContent=1
http://social.msdn.microsoft.com/Forums/en/sqlreplication/thread/7d1b8e01-f372-4d67-b213-5576345e71ec