没有截图:
创建可更新订阅,正常创建了发布,在订阅端创建订阅,最后一步提示完成,却出现了警告:
无法为可更新的订阅设置发布服务器登录名。可能需要使用 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