2012-06-22 4 views
1

나는 트랜잭션 복제 토폴로지의 노드간에 데이터를 동기화하는 RedGate SQL Compare를 사용하여 프로그램을 작성하고 있습니다. 두 개 이상의 노드가있는 경우 트리의 모든 링크를 동기화 할 수 있도록 SQL 인스턴스/데이터베이스 이름의 쌍을 만드는 자동화 된 방법이 필요합니다.배포 데이터베이스에서 게시자 및 구독자의 인스턴스 이름을 찾는 방법

이 정보는 배포 데이터베이스에 저장됩니다. 게시 데이터베이스 및 구독 데이터베이스 (MSsubscriptions)의 이름이 포함 된 테이블을 발견했습니다.

그러나 publisher_id 및 subscriber_id가 필드로 나열되어 있지만 SQL 인스턴스의 이름을 가져 오는 데 사용할 수있는 방법이 없습니다.

배포 데이터베이스의 MSsubscriber_info에는 게시자의 SQL 인스턴스 이름이 포함되어 있지만 ID 열은 없습니다.

게시 데이터베이스와 일치하는 게시자를 얻는 방법을 아는 사람이 있습니까? 나는 누군가가 줄 수있는 어떤 조언도 감사 할 것이다. 감사.

답변

2

당신이 찾고있는 정보는 master.sys.servers

그래서 당신이 servers 테이블에 server_idMSsubscriptions에서 PUBLISHER_ID 및 subscriber_id에 참여할 것입니다. 이것은 당신을위한 좋은 출발점이되어야합니다 (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

이것은 위대합니다. 나는 master 데이터베이스를 들여다 보지 않을 것이다. 감사! – user1202747

+1

그냥 master가 아닌 다른 곳에서 sys.servers를 참조 할 수 있다고 덧붙일 것입니다. –

+0

이것은 SQL Server 2005에서 작동하지 않습니다. 잘못된 개체 이름 'distribution.dbo.MSsubscriptions'이 발생합니다. " – Jerry

관련 문제