回答:
はい、特定のジョブがプライマリレプリカである場合に実行する他のレプリカにジョブを作成する必要があります。
各SQL Serverエージェントジョブを実行するif / whenの独自のロジックを作成する必要があります。たとえば、現在のインスタンスが特定の可用性グループのプライマリレプリカである場合にのみジョブを実行しますか?あなたはそれをあなたの仕事に入れる必要があります。AlwaysOn AGの柔軟性が失われるため、自動的に覆うことはできません。セカンダリレプリカでそれらを無効にするかどうか、それらのジョブが何をするか、どのように/いつ/どのように実行するかは、完全にあなた次第です。
セカンダリレプリカサーバーは、フェイルオーバーを待機する単なるスタンバイサーバーではないことに注意してください。完全に機能し、アクセス可能なサーバーである可能性があります。このため、すべての仕事をアイドル状態にしておくことは、大きな障害となるでしょう。
そのため、はい、ジョブを他のレプリカにプッシュし、ジョブが開始されたときにジョブを実行し続けるかどうかについてロジックを使用する必要があります。
たとえば、バックアップジョブは、sys.fn_hadr_backup_is_preferred_replica関数を利用して、現在のレプリカが特定のデータベースの優先レプリカであるかどうかを判断できます。これにより、バックアップ設定の可用性グループのセットアップ方法がわかります。
Books Onlineのドキュメントで、「ジョブをスケジュールするときに、プライマリでのみ実行するロジックを追加する」と言っているのと似たような不満に少し出会いましたが、その方法は述べていません。sys.fn_hadr_backup_is_preferred_replicaは、バックアップジョブには非常に優れていますが、「プライマリ」または同様の機能には同様の機能がないようです。幸い、次のようなものからその情報を取得できます。
select
DB_NAME(database_id),role_desc
from
sys.dm_hadr_availability_replica_states a
inner join
sys.dm_hadr_database_replica_states d
on
a.replica_id = d.replica_id
and
a.group_id = d.group_id
where
database_id = DB_ID()
and
d.is_local = 1
これで、現在のデータベースの役割がわかります。