2010-04-27 61 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授權。