1. 程式人生 > >SqlServer 無法為可更新的訂閱設置發布服務器登錄名 sp_link_publication

SqlServer 無法為可更新的訂閱設置發布服務器登錄名 sp_link_publication

link 新的 rom publish 名稱 其他 警告 啟用 rop

原文: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