2012-06-22 29 views
1

我正在使用RedGate SQL编写一个程序比较在事务复制拓扑中的节点之间同步数据。在节点超过2个的情况下,我需要一种自动创建SQL实例/数据库名称配对的自动方式,以便我可以同步树中的所有链接。如何在发布数据库中查找发布者和订阅者的实例名称

我相信这个信息存储在分布数据库中。我找到了包含发布数据库和订阅数据库(MSsubscriptions)名称的表。

但是,尽管publisher_id和subscriber_id被列为字段,但我没有看到如何使用它来获取SQL实例的名称。

分发数据库中的MSsubscriber_info包含发布者的SQL实例名称,但没有ID列。

有谁知道我如何才能获得与发布数据库匹配的发布者?我会很感激任何人都可以给的建议。谢谢。

回答

2

你正在寻找的信息是master.sys.servers

所以,你会加入来自MSsubscriptions的PUBLISHER_ID和subscriber_id上server_idservers表。这应该是一个很好的起点(假设SQL Server 2005或更高版本)

select distinct pub.name, sub.name 
    from master.sys.servers pub 
     join distribution.dbo.MSsubscriptions s 
      on s.publisher_id = pub.server_id 
     join master.sys.servers sub 
      on s.subscriber_id = sub.server_id; 
+0

这很好。我不会想到在主数据库中查找。谢谢! – user1202747

+1

我只是补充一点,你可以从任何地方引用sys.servers,而不仅仅是master。 –

+0

这不会为sql server 2005工作,它会引发错误'“无效的对象名称'distribution.dbo.MSsubscriptions'。” – Jerry

相关问题