web-dev-qa-db-ja.com

SQL Server 2008レプリケーションの失敗:プロセスは 'sp_replcmds'を実行できませんでした

SQLレプリケーションに問題があり、修正に問題があります。私がやっているのは、実稼働バックアップから2つのDBを復元し、それらの間にレプリケーションをインストールすることです。レプリケーションはエラーなしで構成されているようですが、ステータスを見ると、次のようなエラーメッセージが表示されます。

エラーメッセージ:

プロセスは「MYSERVER1」で「sp_replcmds」を実行できませんでした。ヘルプを取得: http:// help/MSSQL_REPL20011

プリンシパル「dbo」が存在しないか、このタイプのプリンシパルを偽装できないか、権限がないため、データベースプリンシパルとして実行できません。 (ソース:MSSQLServer、エラー番号:15517)ヘルプを取得: http:// help/15517

プロセスは「MYSERVER1」で「sp_replcmds」を実行できませんでした。ヘルプを取得: http:// help/MSSQL_REPL22037

これは何を意味するのでしょうか?

26
skb

この問題が発生したとき、データベースには所有者が正しく設定されていませんでした。別のWindowsドメインからデータベースを復元し、データベース->プロパティを右クリックして、「一般」タブで所有者が正しく設定されていることを確認しました。ただし、「ファイル」タブでは、所有者はまったく設定されていません。設定するとすぐに、レプリケーションは問題なく実行されていました。

59

「dbo」は無効なログインにマップします。 select suser_sname(owner_sid) from sys.databasesを実行すると、これらの2つのDBに対しておそらくNULLを取得します。 「dbo」を有効なログインに変更する必要があります。両方のデータベースで実行します:

ALTER AUTHORIZATION ON DATABASE::[<dbname>] TO [sa]
22
Remus Rusanu

enter image description here

エラーを修正する最も簡単な方法は、dboにNULLログインが一致するデータベースでALTER AUTHORIZATIONを使用することです。

1
arnav

記事フィルターを使用する場合は、一意のフィルター名を使用する必要があることがわかりました。フィルター名をすべての記事で一意になるように変更すると、この問題は修正されました。

1
DCFx

この例では、SQLインスタンスが実行されていたサービスアカウントがロックされました。ロックを解除し、LogReader SQLエージェントジョブを停止/再起動すると、再び流れ始めました。

0
E Elhassan