Amazon Relational Database (Amazon RDS) for Microsoft SQL Server マルチ AZ インスタンスのプライマリホストとセカンダリホストの間で SQL Server Agent のジョブを同期させたいと考えています。これを実行するにはどうすればよいですか?
簡単な説明
Amazon RDS for SQL Server は、バックグラウンドでマルチ AZ 設定に常時オン/ミラーリングを使用します。SQL Server Agent のジョブは msdb システムデータベースに保存されます。このシステムデータベースは、マルチ AZ 配置の一部としてはレプリケートされません。そのため、SQL Server Agent のジョブは自動的に同期されません。フェイルオーバー後に、新しいプライマリでジョブを再作成する必要があります。ただし、ジョブは最初に作成された古いプライマリに存在しています。インスタンスを以前のプライマリ (ジョブが最初に作成された場所) にフェイルバックしても、ジョブは引き続き表示されます。マルチ AZ でジョブを作成するには、まずプライマリ (アクティブ) インスタンスでジョブを作成します。その後、RDS インスタンスをフェイルオーバーし、新しいプライマリインスタンスで同じジョブを作成します。
新しいプライマリで手動でジョブを作成しないようにするには、[SQL Agent Job replication] (SQL Agent のジョブのレプリケーション) をオンにします。マルチ AZ 環境でジョブのレプリケーションをオンにすると、SQL Server Agent のジョブはプライマリホストからセカンダリホストに自動的にコピーされます。ジョブはエージェントレプリケーション機能を通じて同期されるため、新しいプライマリレプリカでジョブを手動作成する必要はありません。ジョブは両方のレプリカで使用できます。
詳細については、「Amazon RDS for Microsoft SQL Server のマルチ AZ 配置」を参照してください。
解決方法
SQL エージェントレプリケーション機能をオンにする
プライマリインスタンスの管理者アカウントで次の手順を実行し、SQL Server Agent のジョブのレプリケーションをオンにします。
重要な注意: この手順は、使用可能なすべてのエージェントジョブがあるインスタンスで実行してください。使用可能なエージェントジョブがないインスタンスがプライマリになり、この機能をオンにすると、セカンダリインスタンスのジョブはすべて削除されます。また、この機能の一環として、既存のジョブと新しく作成されたジョブはすべてレプリケートされることに注意してください。
EXECUTE msdb.dbo.rds_set_system_database_sync_objects
@object_types = 'SQLAgentJob';
SQL エージェントのレプリケーション機能がオンになっていることを確認する
次のクエリを使用して、レプリケーション機能がオンになっていることを確認します。
SELECT * from msdb.dbo.rds_fn_get_system_database_sync_objects();
前述のクエリは、レプリケーション機能がオンになっている場合、object_class の SQLagentjob を返します。クエリから何も返されない場合、機能はオンになっていません。
変更されたジョブと新しいジョブが最後にセカンダリと同期された日時を確認する
次のクエリを使用して、レプリケーションの last_sync_time を確認します。
SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();
クエリ結果では、同期時刻がジョブの更新時刻または作成時刻よりも後である場合、ジョブはセカンダリと同期されます。
注: ジョブの作成時刻または更新時刻がわからない場合は、次のクエリを実行してタイムスタンプを取得してから、前述のクエリを実行します。
select name as 'JobName'
,JobStatus = CASE
When enabled =1 Then 'Active'
Else 'Inactive'
END
,date_created As 'JobCreatedOn' ,date_modified as 'LastModified'
from msdb..sysjobs
注: ジョブがレプリカ間で同期されるまで数分かかります。
DB フェイルオーバーを実行してジョブがレプリケートされたことを確認する場合は、last_sync_time が更新されるのを待ってから、マルチ AZ フェイルオーバーを続行します。
セカンダリのジョブのステータス
SQL Server Agent XP は、セカンダリレプリカのレプリケーション機能を使用しているかどうかにかかわらず、[Disabled] (無効) 状態になっています。そのため、ジョブはセカンダリサーバーでは実行されません。
エージェントジョブのレプリケーションでサポートされているジョブカテゴリとサポートされていないジョブカテゴリ
次のカテゴリのジョブがレプリケートされます。
- [未分類 (ローカル)]
- [未分類 (マルチサーバー)]
- [未分類]
- データコレクター
- データベースエンジンチューニングアドバイザー
- データベースメンテナンス
- フルテキスト
注: ステップタイプを T-SQL として使用するジョブのみがレプリケートされます。
レプリケーションをサポートしないカテゴリは次のとおりです。
- SQL Server Integration Services (SSIS)、SQL Server Reporting Services (SSRS)、レプリケーション、PowerShell などのステップタイプのジョブ。
- Database Mail とサーバーレベルのオブジェクトを使用するジョブ。
SQL Server Agent のジョブのレプリケーションをオフにする
SQL Server Agent のジョブのレプリケーションをオフにするには、次のコマンドを実行します。
EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = '';
レプリケーションをオフにすると、既存のジョブや新しく作成されたジョブに対する変更が他のレプリカと同期されなくなります。