2011-01-20 58 views

回答

6

我不確定這是一個簡單的答案,我認爲答案可能因複製類型而異。我想你可能不得不依靠啓發式來回答它。

對於快照複製,我無法想到任何會讓遊戲離開的東西。很明顯,複製表的存在(例如MSreplication_objects)告訴你在數據庫內正在進行復制,但就我所知,沒有關於表的任何特定線索。

對於事務複製(非更新),您可以通過MSreplication_objects去(這將列出一些存儲的特效),然後使用sys.sql_dependencies來查找這些涉及到

對於事務複製表(更新) ,你可以看看在MSsubscription_articles(或找訂閱更新對陣表觸發器的存在)

對於合併複製,你可以看看在sysmergearticles,但你也不得不在sysmergesubscriptions看,以確定你」重新在訂閱方面。

0

最簡單的方法是創建一個到主服務器的鏈接服務器並查詢表[distribution]。[dbo]。[MSarticles]。

-1

看看DATABASEPROPERTYEX。它有一個'IsSubscribed'選項,應該做你想做的事情。

+0

這會告訴你數據庫是否是訂閱者,但不會讓你確定哪些表是訂閱的一部分。訂閱數據庫可以包含他們自己的不屬於該出版物的表格。 – 2011-01-20 11:04:13

3

轉到訂戶數據庫檢查表dbo.MSreplication_subscriptions。如果數據庫是subscriber,您會發現此表。此外,找出文章中subscribed數據庫

SELECT publisher,Publisher_Db,publication,article 
FROM dbo.MSreplication_objects 
0

我用達米安異教徒的想法(+1),以產生這種代碼爲我工作

SELECT DISTINCT 
    ot.object_id 
    ,ot.schema_id 
    ,r.publisher 
    ,r.publisher_db 
    ,r.publication 
    ,r.article 
FROM 
    dbo.MSreplication_objects R 
     INNER JOIN sys.objects so ON r.object_name = so.name AND so.type = 'P' --stored procedures 
     INNER JOIN sys.sql_dependencies dp ON so.object_id = dp.object_id 
     INNER JOIN sys.objects ot ON dp.referenced_major_id = ot.object_id --objects 
           AND r.article = ot.name