SQLレプリケーションに問題があり、修正に問題があります。私がやっているのは、実稼働バックアップから2つのDBを復元し、それらの間にレプリケーションをインストールすることです。レプリケーションはエラーなしで構成されているようですが、ステータスを見ると、次のようなエラーメッセージが表示されます。
エラーメッセージ:
プロセスは「MYSERVER1」で「sp_replcmds」を実行できませんでした。ヘルプを取得: http:// help/MSSQL_REPL20011
プリンシパル「dbo」が存在しないか、このタイプのプリンシパルを偽装できないか、権限がないため、データベースプリンシパルとして実行できません。 (ソース:MSSQLServer、エラー番号:15517)ヘルプを取得: http:// help/15517
プロセスは「MYSERVER1」で「sp_replcmds」を実行できませんでした。ヘルプを取得: http:// help/MSSQL_REPL22037
これは何を意味するのでしょうか?
この問題が発生したとき、データベースには所有者が正しく設定されていませんでした。別のWindowsドメインからデータベースを復元し、データベース->プロパティを右クリックして、「一般」タブで所有者が正しく設定されていることを確認しました。ただし、「ファイル」タブでは、所有者はまったく設定されていません。設定するとすぐに、レプリケーションは問題なく実行されていました。
「dbo」は無効なログインにマップします。 select suser_sname(owner_sid) from sys.databases
を実行すると、これらの2つのDBに対しておそらくNULLを取得します。 「dbo」を有効なログインに変更する必要があります。両方のデータベースで実行します:
ALTER AUTHORIZATION ON DATABASE::[<dbname>] TO [sa]
記事フィルターを使用する場合は、一意のフィルター名を使用する必要があることがわかりました。フィルター名をすべての記事で一意になるように変更すると、この問題は修正されました。
この例では、SQLインスタンスが実行されていたサービスアカウントがロックされました。ロックを解除し、LogReader SQLエージェントジョブを停止/再起動すると、再び流れ始めました。