我有一个来自SQL Server 2005的数据库,我以编程方式附加到SQL Server 2008 R2的一个实例,然后在某些表上重新建立复制(通过一些已经工作了很长时间的预先编写的脚本)另一台服务器仍在运行SQL Server 2005。
我只想说这只是一个特别复杂的业务要求。
有趣的是,复制在特定SQL Server代理作业上失败,并显示错误“无效列名'创建者ID'”。从我可以从这个链接中了解到:http://www.experts-exchange.com/Microsoft/Development/MS-SQL-Server/Q_24145417.html - 旧数据库需要升级各种各样的部分才能正常使用SQL Server 2008 R2的复制。该升级过程与运行存储过程sp_vupgrade_replication:http://technet.microsoft.com/en-us/library/ms188741.aspx
一样简单问题1:为什么有关于复制的 ANY 信息会附加到我附加的数据库中?!我的理解是,分发数据库包含整个复制信息。我删除并重新附加了数据库的未升级副本,以确保它仍然无法确保我不会疯狂。
问题2:我知道当您将数据库附加到较新版本的SQL Server时,会执行一些将数据库升级到某个兼容级别的过程。为什么不运行此存储过程?
问题3:这个存储过程到底发生了什么变化?有什么方法我可以找到比MSDN文章提供给我的更多?我没有尝试过,但我很确定SQL Profiler会告诉我它正在执行sp_vupgrade_replication而不是给我任何正在运行的查询的详细信息。
答案 0 :(得分:2)
问题1: Publisher数据库负责在其事务日志中标记要复制的事务。然后,日志读取器代理监视发布者的事务日志,查找标记的事务,并将这些事务复制到分发数据库。有关其他详细信息,请参阅:sp_replcmds和sp_repldone。
问题2:我的猜测(这只是猜测)是因为程序升级了系统和用户数据库,所以在附加操作期间不会自动运行。
问题3:您可以自己查看程序的详细信息。
use msdb
go
sp_helptext 'sys.sp_vupgrade_replication'
go