SqlServer 无法为可更新的订阅设置发布服务器登录名 sp_link_publication

Posted lonelyxmas

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SqlServer 无法为可更新的订阅设置发布服务器登录名 sp_link_publication相关的知识,希望对你有一定的参考价值。

原文:SqlServer 无法为可更新的订阅设置发布服务器登录名 sp_link_publication

没有截图:


创建可更新订阅,正常创建了发布,在订阅端创建订阅,最后一步提示完成,却出现了警告:

无法为可更新的订阅设置发布服务器登录名。可能需要使用 sp_link_publication 直接在订阅服务器计算机上设置它。


突然想起来这个发布和订阅的数据库都是其他库还原过来的,应该是账号问题:


在发布数据库和订阅数据库都执行:

--	查看孤立数据库用户
exec sp_change_users_login @Action='Report';

发现警告中提示的数据库用户(repllinkproxy)是孤立的,也就是没有关联到本地的登录账户(repllinkproxy)

--数据库用户关联到sql server登录名 
exec sp_change_users_login   
    @action='update_one',   
    @usernamepattern='repllinkproxy',
    @loginname='repllinkproxy'; 
go  


-------------------------------------------------------------------------------

-------------------------------------------------------------------------------

还有一种方法:

在创建订阅的最后一步,使用现有的连接服务器名称作为连接,也可能有上面的错误提示!

解决方法是在订阅服务器中执行以下脚本设置连接安全信息:

exec sp_link_publication 
  @publisher = 'publisher' 
, @publisher_db = 'publisher_db' 
, @publication = 'publication' 
, @security_mode = security_mode

若出现以下错误:

 链接服务器"DB"的 OLE DB 访问接口 "SQLNCLI10" 返回了消息 "该事务管理器已经禁止了它对远程/网络事务的支持。"。
消息 7391,级别 16,状态 2,第 1 行
无法执行该操作,因为链接服务器 "DB" 的 OLE DB 访问接口 "SQLNCLI10" 无法启动分布式事务。

解决方法是:右键服务器链接,在服务器选项中,把 “为RPC启用针对分布式事务的升级” 改为 “false”,再重新执行上面的语句。或者sql脚本执行

USE [master]
GO
EXEC master.dbo.sp_serveroption @server=N'LinkServerName', @optname=N'remote proc transaction promotion', @optvalue=N'False'
GO



 

















以上是关于SqlServer 无法为可更新的订阅设置发布服务器登录名 sp_link_publication的主要内容,如果未能解决你的问题,请参考以下文章

SqlServer & Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC)

sqlserver 2012怎么看本地订阅

SqlServer 使用脚本创建分发服务及事务复制的可更新订阅

SqlServer发布订阅の代理服务器无法启动,救命啊

SQLServer 可更新订阅数据冲突的一个原因

没有 Azure 订阅,无法创建集成服务目录