我们正在尝试测试事务复制的成功。通过谷歌搜索,我发现我需要在我们的发布者中执行这个存储过程:
但是,当我执行时:
exec sys.sp_publication_validation
@publication=ReplicationFaouzi,
@rowcount_only=0,
@full_or_fast=0,
@shutdown_agent=0
我收到此错误:
消息 20026,级别 16,状态 1,过程 sp_MSpublication_validation,第 57 行 发布“ReplicationFaouzi”不存在?
当我运行这个 sql 时:
SELECT publication
FROM MSpublications
ORDER BY publication
我得到结果:
ReplicationFaouzi
怎么了 ?
更新
通过检查这个存储过程的代码,我发现它调用了未找到的存储过程 sys.sp_MSreplcheck_publish和sys.sp_MSrepl_getpublisherinfo:
exec @retcode = sys.sp_MSreplcheck_publish
if @@error <> 0 or @retcode <> 0
begin
return (1)
end
EXEC @retcode = sys.sp_MSrepl_getpublisherinfo @publisher = @publisher,
@publisher_type = @publisher_type OUTPUT,
@rpcheader = @cmd OUTPUT
sys.sp_MSreplcheck_publish存在于名为模型的数据库下,我找不到sys.sp_MSrepl_getpublisherinfo!
更新 2
我的团队重新创建了复制数据库,现在这个 sql 命令:
SELECT [name] FROM sys.databases WHERE is_published = 1;
不返回任何值,但是这个:
SELECT [name] FROM sys.databases WHERE is_merge_published = 1;
返回 'Guichet'
现在,当我运行时:
USE [Guichet];
GO
EXEC sp_helppublication;
我什么也得不到!
您需要在发布数据库(您希望复制的数据源的数据库)的上下文中运行该过程。你可以用一个
USE
声明来做到这一点:如果您不确定哪个数据库是发布数据库,您可以运行此查询来查找哪些数据库被配置为发布者:
从该查询中获得数据库名称后,您可以运行它以查看应传递给
sp_publication_validation
. 在您的情况下,发布者名为Guichet
,因此您将运行:这将为您提供需要传递给
@publication
参数的值。请注意,以上所有内容都是在事务复制的上下文中编写的(这是原始问题的内容)。不同类型的复制需要不同的步骤。
Microsoft Docs 网站上有一个很棒的“信息收集”脚本,它可以在使用不同类型的复制时逐步获取有关分销商和出版商的信息:
分销商和出版商信息脚本