2010-04-27 101 views
23

我遇到了SQL复制问题,我在修复时遇到了问题。我正在做的是从生产备份中恢复两个数据库,然后在它们之间安装复制。复制似乎配置没有任何错误,但是当我看状态时,我看到如下错误消息:SQL Server 2008复制失败:进程无法执行'sp_replcmds'

我有一个SQL复制问题,我遇到了问题修复。我正在做的是从生产备份中恢复两个数据库,然后在它们之间安装复制。复制似乎没有任何错误配置,但是当我看到在复制监视器的状态我看到错误消息是这样的:

错误消息:

进程无法执行 “sp_replcmds”上'MYSERVER1'。获取 帮助:http://help/MSSQL_REPL20011

无法执行作为数据库 主要因为主体“DBO” 不存在,这种类型的主要 不能被冒充,或者你没有 权限。 (源:MSSQLServer, 错误号:15517)获取帮助: http://help/15517

进程无法执行 'MYSERVER1' sp_replcmds“。 获取帮助:http://help/MSSQL_REPL22037

这是什么意思?

回答

20

'dbo'映射到无效的登录名。如果您运行select suser_sname(owner_sid) from sys.databases,那么您可能会为这两个DB获得NULL。您需要将'dbo'更改为有效的登录名。在两个数据库上运行:

ALTER AUTHORIZATION ON DATABASE::[<dbname>] TO [sa] 
+0

这样做会将数据库的所有者更改为sa,这是我不想要的。数据库的所有者目前是我的个人帐户,我希望它保持这种状态。我能否以某种方式重新关联dbo? – skb 2010-04-28 20:39:54

+0

您可以将其关联到您想要的任何帐户,但必须是有效的NT帐户。 suser_sname(owner_sid)是否返回NULL?然后是一个无效的帐户,你必须*改变它。 – 2010-04-28 20:49:37

51

当我遇到这个问题时,我的数据库没有正确设置所有者。我从另一个Windows域恢复了数据库,右键单击数据库 - >属性,并在“常规”选项卡中验证了所有者设置正确。但是,在“文件”选项卡中,所有者根本没有设置。一旦我设置,复制运行没有问题。

+1

这个答案拯救了我的理智!我运行了一个跟踪,发现在“文件”选项卡中更改所有者称为sp_changedbowner,它调用Remus对此问题的回答中提及的“ALTER AUTHORIZATION ...”。 – GaTechThomas 2012-08-23 23:54:47

+0

这很容易做到。保存了我的一天。作品。 – 2012-10-02 15:42:59

+1

这也给我修好了,非常感谢! – Dan 2014-11-17 20:44:57

1

我发现如果您使用文章筛选器,则必须使用唯一的筛选器名称。一旦我将所有文章中的过滤器名称更改为唯一,它就解决了这个问题。

0

在我们的案例中,运行SQL实例的服务帐户被锁定。解锁后,我们停止/重新启动LogReader SQL代理作业,然后再次开始流动。

1

enter image description here

纠正错误的最简单方法是在其上有DBO NULL的登录匹配的数据库使用ALTER授权。