如何跟踪SQL Server 2005中订阅服务器的复制行的时间?
基本问题如下:
订阅者已使用事务复制成功地从发布者复制了一行。现在,我们如何跟踪上一次成功复制该行的时间?如何跟踪SQL Server 2005中订阅服务器的复制行的时间?
一位朋友提出了他用于他的SQL Server 2000的以下解决方案:
1)添加一个日期时间列。
2)更改复制存储过程以更新日期时间列(!)。
步骤#2引发了我内部的各种警告铃声,所以我问在这种情况下是否有更好的SQL Server 2005解决方案,甚至在我详细讨论他的解决方案之前。
我会做你的朋友建议的。这样,只有对复制过程的调用才会更新时间戳。
这种方法的问题是,你需要一个写锁,但我没有看到任何其他实际的方法。你可以使用一个触发器,当你取出该行时触发(不要引用我的说法,我很少使用触发器),但这看起来不正确(你可能会以误报结束)
如果您正在使用事务复制,那么为什么不记录主数据更新的时间,并认为它在下一个复制作业中被复制到其他数据库?
@Philippe:该方法的主要问题是复制可能需要一段时间才能到达一些更远程的数据库,因为网络连接不好。因此,主记录的更新时间将不会反映在远程数据库中实际复制的记录的时间。
无论如何,我已经测试了我的朋友的方法,它对我们的要求很好。
如果有人想这样做,这里有一个重要的注意事项:注意初始化订阅和将来的架构更改。
对于我的情况,我们决定initialize the snapshot manually为了保持Subscriber数据库中添加的日期时间列。另一种可能的方法是允许初始化,但修改现有存储过程以忽略复制添加的日期时间列。
几个星期前,我有这个确切的问题,试图找到最近更改的记录。
创建一个新列并将数据类型设置为TIMESTAMP。当行更新时,SS2005自动更新此类型。唯一的问题是这个'时间戳'与日期或时间完全没有关系,它只是一个反映该行上次成功更新的数字(任何更新,而不仅仅是通过复制)。如果这就是你所需要的,那么你应该没问题。
如果您需要最后的复制更新,事情可能会有点棘手,并且您需要用触发器和存储过程来弄脏手。
http://www.sqlteam.com/article/timestamps-vs-datetime-data-types
希望有所帮助〜