問題場景 SQL Server事務複製在正常創建發佈和訂閱之後,log reader Job 啟動異常,出現“The process could not execute ‘sp_replcmds’ on xxx”等異常日誌導致代理服務無法正常啟動。 異常現象 參考下圖,異常日誌如下 Error me ...
問題場景
SQL Server事務複製在正常創建發佈和訂閱之後,log reader Job 啟動異常,出現“The process could not execute ‘sp_replcmds’ on xxx”等異常日誌導致代理服務無法正常啟動。
異常現象
參考下圖,異常日誌如下
Error messages:
- The process could not execute ‘sp_replcmds’ on xxx.
- Cannot execute as the database principal because the principal “dbo” does not exist, this type of principal cannot be impersonated, or you do not have permission.
- The process could not execute ‘sp_replcmds’ on xxx.
異常原因
這種常見錯誤發生於資料庫是被從其他備份還原過來的,資料庫的owner通常是一個域賬號(服務賬號)且該賬號不存在與當前資料庫實例中,亦或者還原資料庫的域賬號失效(密碼變更),導致資料庫沒有有效的owner,或者SQL Server無法正確識別資料庫的所有者。
解決方案
1,通過腳本修改資料庫的owner為sa或者本地的一個sysadmin的賬號
USE PublishedDatabase GO --檢查資料庫的owner select name, suser_sname(owner_sid)from sys.databases; GO EXEC sp_changedbowner 'sa' GO
2,通過SSMS圖形界面修改