2010-10-18 92 views
2

我已经从SQL Server 2005中获得了一个数据库,该数据库以编程方式附加到SQL Server 2008 R2的实例,然后在某些表上重新建立复制(通过一些预先烘焙的脚本已经工作了一小段时间)与另一台服务器仍然运行SQL Server 2005.SQL复制和sp_vupgrade_replication问题

只需要说这只是一个特别复杂的业务需求。

有趣的是,复制在特定的SQL Server代理作业上失败,并显示“无效的列名”始发者标识符“”。从我可以从这个链接中得知: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:为什么会出现有关复制烤到我附加数据库任何信息?我的理解是分发数据库包含整个复制信息。我已删除并重新附加了数据库的未升级副本,以确保它仍然无法确保我不会精神崩溃。

问题2:我知道在将数据库附加到较新版本的SQL Server时,会执行一些过程以将数据库升级到某个兼容级别。为什么没有这个存储过程运行?

问题3:这个存储过程究竟发生了什么变化?有什么办法可以找到比MSDN文章提供给我更多的东西吗?我还没有尝试过,但我非常确定SQL Profiler会告诉我它正在执行sp_vupgrade_replication,并且不会提供它正在运行的查询的任何细节。

回答

2

问题1: Publisher数据库有责任在其事务日志中标记要复制的事务。然后,日志读取器代理监视发布者的事务日志,查找标记的事务并将其复制到分发数据库。有关其他详细信息,请参阅:sp_replcmdssp_repldone

问题2:我的猜测(这只是一个猜测),因为该过程升级系统和用户数据库,它不会在附加操作过程中自动运行。

问题3:您可以自己查看过程的详细信息。

use msdb 
go 
sp_helptext 'sys.sp_vupgrade_replication' 
go 
+0

我不确定我是否理解您对问题1的回答。按发行商数据库,你的意思是发布的数据库?或者一个实际的数据库实体与它分离? 我的问题#1更像是一个设计 - 为什么关于复制的特定于版本的信息导致数据库的这部分失败,而不是msdb?这不像一个兼容性级别,您可以在不同版本上运行多个数据库。您尝试在不升级的情况下复制旧数据库,并且以非常迟钝的方式失败。对我来说没有意义。 – 2010-10-18 19:59:26

+0

其他新闻,谢谢!我不知道你可以用sp_helptext得到存储过程的确切文本。在职培训的风险.. – 2010-10-18 20:00:55

+0

@phyllis diller:当我说出版商,我的意思是数据库正在出版。 – 2010-10-18 20:01:48