SQL Server数据库Owner导致事务复制log reader job无法启动的解决办法

问题场景

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图形界面修改

 

热门相关:拳皇之梦   美漫大幻想   误踩老公底线:甜心难招架!   异界之极品奶爸   不负荣光,不负你