現象
たとえば次のようなシナリオを考えてみます。
- 含まれている可用性グループがデプロイされている SQL Server 2022 のインスタンスがあります。
- サーバー レベルのオブジェクト (ログインとジョブ) は、含まれている可用性グループのコンテキストで作成します。
このシナリオでは、SQL Server のこのインスタンスに累積的な更新プログラムをインストールした後に、次のいずれかのエラーが発生します。
エラー 1
SQL Server エージェント ジョブは失敗し、次のエラー メッセージが表示されます。
手順 2 の実行を開始できません (理由: JobOwner <JobOwner> にプロキシ <#> サブシステム SSIS を使用するためのアクセス許可がありません)。 手順は失敗しました。
SQL Server エージェントのエラー ログには、次のようなエラー メッセージが記録されます。
<タイムスタンプ> - ! [298] SQLServerエラー:208、オブジェクト名「syssubsystems」が無効です。 [SQLSTATE 42S02]
<タイムスタンプ> - ! [517] SQL エラー番号 208、重大度 16
この段階では、 syssubsystems テーブルは含まれている可用性グループの msdb データベースに存在しませんが、インスタンス レベルの msdb データベースに存在します。 これらのエラーを修正し、ジョブを正常に実行するには、リスナーに接続してテーブルとテーブル内の行を作成することで、インスタンス レベルの syssubsystems テーブルを含まれている可用性グループの msdb データベースに手動でコピーできます。
エラー 2
包含された可用性グループを作成すると、5 秒ごとに次のエラー メッセージが表示されます。
アクティブ化されたプロセッサ '[dbo].キュー '<AGName>_AG_SYNC_CONTAINED_msdb.dbo.syspolicy_event_queue' で実行されている [sp_syspolicy_events_reader]' の出力: 'プリンシパル "##MS_PolicyEventProcessingLogin##" が存在しないため、データベース プリンシパルとして実行できません。この種類のプリンシパルは偽装できません。またはアクセス許可がありません。'
エラー 3
データベース メールが動作を停止した後に、sysmail ストアド プロシージャを実行しようとすると、次のようなエラー メッセージが報告されます。
オブジェクト '[dbo].[sp_syspolicy_events_reader]' はデータベース 'master' に存在しないか、この操作に対して無効です。
エラー 4
含まれる可用性グループを作成した後、含まれている可用性グループ リスナーに接続し、SQL Server ログイン プリンシパルを作成すると、ログイン プリンシパルを使用して接続すると、SQL Server Management Studio (SSMS) で次のエラーが表示されます。
<リスナーへの接続中にエラーが発生しました>
この要求のデータを取得できませんでした。 (Microsoft.SqlServer.Management.Sdk.Sfc)
Transact-SQL ステートメントまたはバッチの実行中に例外が発生しました。 (Microsoft.SqlServer.ConnectionInfo)
EXECUTE 権限がオブジェクト 'xp_msver'、データベース 'mssqlsystemresource'、スキーマ 'sys' で拒否されました。 (Microsoft SQL Server、エラー: 229)
このエラーは、public ロールに、含まれている可用性グループ (AG) マスター上のxp_msver拡張ストアド プロシージャに対するEXECUTE アクセス許可が付与されていないために発生します。
解決策
この問題は、次の SQL Server 用の累積的な更新プログラムで修正されています。
SQL Server 2022 の累積的な更新プログラム 4
SQL Server 用の累積的な更新プログラムについて
SQL Server 用の新しい累積的な更新プログラムには、以前のビルドであったすべての修正プログラムとセキュリティ修正プログラムが含まれます。 ご使用のバージョンの SQL Server 用の最新ビルドをインストールすることをお勧めします。
SQL Server 2022 の最新の累積的な更新プログラム
状態
Microsoft は現在これらの問題を調査しています。 この記事は、詳細またはガイダンスが見つかり次第更新されます。 それまでは、含まれている可用性グループを含むインストールに累積的な更新プログラムをインストールする前に、次の必要な予防措置を講ずることができます。
- サーバー レベル オブジェクトと SQL Server エージェント オブジェクトをスクリプト化します。
- 含まれている可用性グループを削除します。
- 累積的な更新プログラムを適用します。
- 含まれている可用性グループを再作成します。
Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。
参考資料
マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。