SQL Server 2008 复制失败:进程无法执行“sp_replcmds”
Posted
技术标签:
【中文标题】SQL Server 2008 复制失败:进程无法执行“sp_replcmds”【英文标题】:SQL Server 2008 replication failing with: process could not execute 'sp_replcmds' 【发布时间】:2011-02-12 23:06:59 【问题描述】:我遇到了无法修复的 SQL 复制问题。我正在做的是从生产备份中恢复两个数据库,然后在它们之间安装复制。复制似乎配置没有任何错误,但是当我查看状态时,我看到如下错误消息:
错误信息:
进程无法执行 'MYSERVER1' 上的'sp_replcmds'。得到 求助:http://help/MSSQL_REPL20011
不能作为数据库执行 校长因为校长“dbo” 不存在,这种类型的主体 不能被冒充,或者您没有 有权限。 (来源:MSSQLServer, 错误号:15517)获取帮助: http://help/15517
进程无法在“MYSERVER1”上执行“sp_replcmds”。 获取帮助:http://help/MSSQL_REPL22037
这是什么意思?
【问题讨论】:
【参考方案1】:当我遇到这个问题时,我的数据库没有正确设置所有者。我已经从另一个 Windows 域恢复了数据库,右键单击数据库-> 属性并在“常规”选项卡中验证所有者设置是否正确。但是,在“文件”选项卡中,根本没有设置所有者。一旦我设置它,复制就可以毫无问题地运行。
【讨论】:
这个答案拯救了我的理智!我运行了一个跟踪,发现在“文件”选项卡中更改所有者调用 sp_changedbowner,它调用“ALTER AUTHORIZATION...”,如 Remus 对这个问题的回答中所述。 这很容易做到。拯救了我的一天。工作。 非常感谢,帮我节省了很多时间。 我花了 5 个小时才找到这个答案。感谢您发布它。【参考方案2】:'dbo' 映射到无效的登录。如果你运行select suser_sname(owner_sid) from sys.databases
,你可能会得到这两个数据库的 NULL。您需要将“dbo”更改为有效的登录名。在两个数据库上运行:
ALTER AUTHORIZATION ON DATABASE::[<dbname>] TO [sa]
【讨论】:
这样做会将数据库的所有者更改为我不想要的 sa。数据库的所有者目前是我的个人帐户,我希望它保持这种状态。我可以以某种方式重新关联 dbo 吗? 您可以将其关联到您想要的任何帐户,但它必须是有效的 NT 帐户。 suser_sname(owner_sid) 是否返回 NULL?然后是无效帐户,您必须更改它。【参考方案3】:纠正错误的最简单方法是对 dbo 登录匹配为 NULL 的数据库使用 ALTER AUTHORIZATION。
【讨论】:
这是迄今为止解决此问题的最简单方法。拯救了我的一天:-)【参考方案4】:我发现如果您使用文章过滤器,您必须使用唯一的过滤器名称。一旦我将过滤器名称更改为在所有文章中都是唯一的,它就解决了这个问题。
【讨论】:
【参考方案5】:在我们的例子中,运行 SQL 实例的服务帐户被锁定。一旦解锁并且我们停止/重新启动 LogReader SQL 代理作业,事情就会再次开始流动。
【讨论】:
以上是关于SQL Server 2008 复制失败:进程无法执行“sp_replcmds”的主要内容,如果未能解决你的问题,请参考以下文章
Sql server2008! SQL server服务无法启动,并显示错误17113, 修复Sql server2008失败!
Microsoft SQL Server 2008:写入服务器失败
SQL Server 2008作业失败无法确定所有者是否有服务器访问权限
使用 sql server 2008 R2 的远程过程调用失败