检查是否启用复制

问题描述:

检查是否以SQL 2000,2005和2008兼容格式启用复制的最简单方法是什么?不需要任何状态信息...只是为了知道它是否为数据库启用。我需要这个,因为我希望我的Db Migration代码在尝试执行模式更新之前启用复制时引发异常。检查是否启用复制

谢谢。

+0

有各种启发式方法,但没有简单的状态查询。另外,复制可以非常精细,因此可以在数据库中的某些对象上启用它,而这些对象无论如何都不会修改。 –

在看这篇文章,MSDN说:“当一个用户数据库被配置为发布者或订阅服务器,复制增加了系统表到数据库中。当用户数据库是从复制拓扑中删除这些表中移除的”

您可以查找文章中列出的其中一个表作为复制证明,并相应地继续查询。

我发现了这个查询,但这只适用于SQL 2005及更高版本(不适用于SQL 2000 verson)。

T-SQL查询

select name, is_published, is_subscribed, is_merge_published, is_distributor 
    from sys.databases 
    where is_published = 1 or is_subscribed = 1 or 
    is_merge_published = 1 or is_distributor = 1 

来源:www.mssqlinsider.com/2013/09/check-databases-part-replication

SELECT 
    name as [Database name], 
    CASE is_published 
     WHEN 0 THEN 'No' 
     ELSE 'Yes' 
     END AS [Is Published], 
    CASE is_merge_published 
     WHEN 0 THEN 'No' 
     ELSE 'Yes' 
     END AS [Is Merge Published], 
    CASE is_distributor 
     WHEN 0 THEN 'No' 
     ELSE 'Yes' 
     END AS [Is Distributor], 
    CASE is_subscribed 
     WHEN 0 THEN 'No' 
     ELSE 'Yes' 
     END AS [Is Subscribed] 
FROM sys.databases 
WHERE database_id > 4 
+0

该声明没有FROM子句。 –

+0

不确定这是否被视为剽窃。 [来源](http://www.mssqlinsider.com/2013/09/check-databases-part-replication/)(在编辑的情况下) –