正文
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