Amazon Relational Database (Amazon RDS) for Microsoft SQL Server Multi-AZ インスタンスがあります。SQL Server エージェントジョブを自分のインスタンスでプライマリホストとセカンダリホストとの間で同期させたいと考えています。
簡単な説明
Amazon RDS for SQL Server では常に、マルチ AZ セットアップのオン/ミラーリングがバックグラウンドで使用されます。SQL Server エージェントではジョブを msdb システムデータベースに保存します。このシステムデータベースは、マルチ AZ 配置の一部としてはレプリケートされません。そのため、SQL Server エージェントのジョブは自動では同期されません。ジョブは新しいプライマリでフェイルオーバー後に再作成する必要があります。ただし、ジョブがあるのは作成元となった古いプライマリです。インスタンスを前のプライマリ (ジョブを作成した場所) へフェールバックしても、ジョブは前と変わらず表示されます。ジョブをマルチ AZ で作成するには、まずプライマリ (アクティブ) インスタンスでジョブを作成します。続いて、RDS インスタンスをフェイルオーバーし、同じジョブを新しいプライマリインスタンスに作成します。
新しいプライマリでジョブの手動作成を回避するには、[SQL エージェントのジョブレプリケーション] を有効にします。ジョブレプリケーションをマルチ AZ 環境で有効にすると、SQL Server エージェントではジョブが自動的にプライマリホストからセカンダリホストへコピーされます。新しいプライマリレプリカでジョブの手動作成をする必要はありません。ジョブがエージェントのレプリケーション機能によって同期されるためです。ジョブはいずれのレプリカからもアクセスできます。
詳細については、「Amazon RDS for Microsoft SQL Server のマルチ AZ 配置」を参照してください。
**注:**次の解決方法は、Amazon RDS Custom for SQL Server には適用されません。
解決方法
SQL エージェントのレプリケーション機能を有効にする
SQL Server エージェントのジョブレプリケーションを有効にするには、プライマリインスタンスの管理者アカウントで次の手順を実行します。
**重要:**この手順は、すべてのエージェントジョブにアクセスできるインスタンスで実行してください。アクセスできるエージェントジョブがないインスタンスがプライマリになってから、この機能を有効にすると、セカンダリインスタンスのジョブは削除されます。また、この機能の一部として、既存のジョブも新しく作成したジョブもすべてレプリケートされます。
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 フェイルオーバーに進みます。
エージェントのジョブレプリケーションでサポートされているジョブカテゴリとサポートされていないジョブカテゴリ
次のカテゴリのジョブがレプリケートされます。
- [Uncategorized (Local)]
- [Uncategorized (Multi-Server)]
- [Uncategorized]
- データコレクター
- データベースエンジンチューニングアドバイザー
- データベースメンテナンス
- フルテキスト
**注:**ステップタイプを T-SQL として使用するジョブのみがレプリケートされます。
次のカテゴリではレプリケーションをサポートしていません。
- SQL Server Integration Services (SSIS)、Server Reporting Services (SSRS)、レプリケーション、PowerShell など、ステップタイプのジョブ。
- Database Mail とサーバーレベルのオブジェクトを使用するジョブ。
SQL Server エージェントのジョブレプリケーションを無効にする
SQL Server エージェントのジョブレプリケーションを無効にするには、次のコマンドを実行します。
EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = '';
レプリケーションを無効にすると、既存のジョブや新しく作成したジョブに対する変更が他のレプリカと同期しなくなります。