次の方法で共有


MSSQLSERVER_21879

適用対象:SQL Server

詳細

属性
製品名 SQL Server
イベント ID 21879
イベント ソース MSSQLSERVER
コンポーネント SQLEngine
シンボル名 SQLErrorNum21879
メッセージ テキスト 元のパブリッシャー '%s' およびパブリッシャー データベース '%s' をリダイレクトされたサーバー '%s' でクエリできないため、リモート サーバーの名前を特定できません。エラー %d、エラー メッセージ '%s'。

説明

sp_validate_redirected_publisher は、リモート サーバーの名前を検出するため、一時リンク サーバーを作成し、これを使用してリダイレクトされたパブリッシャーに接続します。 リンク サーバー クエリが失敗すると、エラー 21879 が返されます。 リモート サーバー名を要求する呼び出しは通常、一時リンク サーバーを最初に使用するため、接続の問題がある場合はこの呼び出しで初めて問題が現れる可能性があります。 このリモート呼び出しは、リモート サーバーで select @@servername を実行するだけです。

リダイレクトされたパブリッシャーにクエリを実行するために使用されるリンク サーバーは、元のパブリッシャーに対して sp_adddistpublisher を呼び出したときに指定したセキュリティ モード、ログイン、およびパスワードを使用します。

  • SQL Server認証が使用された場合 (セキュリティ モード 0) は、指定されたログインとパスワードを使用してリモート サーバーに接続します。

  • Windows 認証を使用した場合 (セキュリティ モード 1)、接続にはセキュリティ接続が使用されます。

    • sp_validate_redirected_publisher がユーザーによって明示的に呼び出された場合、接続にはユーザーが実行している Windows ログインが使用されます。

    • sp_validate_redirected_publisher がレプリケーション エージェントによって sp_get_redirected_publisher から呼び出された場合、エージェントに関連付けられている Windows ログインが使用されます。

エラー 21879 は、リダイレクトされた対象のパブリッシャーで認識されないログインを使用して sp_validate_redirected_publisher が呼び出されたことを示している可能性があります。

ユーザーの操作

SQL Server認証ログインまたはWindows 認証 ログインがすべての可用性グループ レプリカで有効であり、パブリッシャー データベースのサブスクリプション メタデータ テーブル (syssubscriptions および sysmergesubscriptions) にアクセスするための十分な承認があることを確認します。

ディストリビューター以外のノードで実行されているレプリケーション エージェント (サブスクライバーで実行されているマージ エージェントなど) によって開始された sp_get_redirected_publisher に対する呼び出しからエラー 21879 が返される場合、特別な注意事項があります。 リダイレクトされたパブリッシャーへの接続にWindows 認証を使用する場合は、接続を正常に確立するために Kerberos 認証用にSQL Serverを構成する必要があります。 Windows 認証が使用され、SQL Serverが Kerberos 認証用に構成されていない場合、サブスクライバーで実行されているマージ エージェントが 'NT AUTHORITY\ANONYMOUS LOGON' ログインに失敗したことを示すエラー 18456 が受信されます。 この問題を解決するには、以下の 3 種類の方法があります。

  • Kerberos 認証のSQL Serverを構成します。 SQL Serverオンライン ブックの「Kerberos 認証とSQL Server」を参照してください。

  • sp_changedistpublisher を使用して、MSdistpublishers の元のパブリッシャーに関連付けられているセキュリティ モードを変更し、接続に使用するログインおよびパスワードも指定します。

  • マージ エージェント コマンド ラインでコマンド ライン パラメーター BypassPublisherValidation を指定し、ディストリビューターで sp_get_redirected_publisher が呼び出されるときの検証を省略します。