

# Amazon RDS 用 SQL Server エージェントの使用
<a name="Appendix.SQLServer.CommonDBATasks.Agent"></a>

Amazon RDS では、Microsoft SQL Server の Enterprise、Standard、または Web エディションを実行している DB インスタンスの SQL Server エージェントを使用できます。SQL Server エージェントは、ジョブと呼ばれるスケジュールされた管理タスクを実行する Microsoft Windows サービスです。SQL Server エージェントを使用して T-SQL ジョブを実行し、SQL Server DB インスタンスでインデックスの再構築、データ破損の確認、およびデータの集計を行うことができます。

SQL Server DB インスタンスを作成すると、マスターユーザーが `SQLAgentUserRole` ロールに登録されます。

SQL Server エージェントは、指定したイベントに対応し、またはオンデマンドで、スケジュールに従ってジョブを実行できます。詳細については、Microsoft ドキュメントの [SQL Server エージェント](http://msdn.microsoft.com/en-us/library/ms189237)を参照してください。

**注記**  
DB インスタンスのメンテナンスおよびバックアップウィンドウ中に実行されるジョブをスケジュールすることは避けてください。AWS によって起動されたメンテナンスおよびバックアッププロセスによって、ジョブが中断されたり、ジョブがキャンセルされたりする可能性があります。  
マルチ AZ 配置では、ジョブのレプリケーション機能がオンになっているとき、SQL Server エージェントジョブは、プライマリホストからセカンダリホストにレプリケートされます。詳細については、「[SQL Server エージェントジョブレプリケーションをオンにする](#SQLServerAgent.Replicate)」を参照してください。  
マルチ AZ 配置は、SQL Server エージェントジョブの数が 10,000 に制限されています。制限の引き上げが必要な場合は、サポート に連絡して緩和をリクエストしてください。[AWS サポート センター](https://console.aws.amazon.com/support/home#/)のページを開き、必要に応じてサインインし、[**ケースの作成**] を選択します。**[Service Limit increase]** (サービス制限の緩和) を選択します。フォームに入力して送信します。

SQL Server Management Studio (SSMS) で個々の SQL Server エージェントジョブの履歴を表示するには、オブジェクトエクスプローラーを開き、ジョブを右クリックして、[**View History**] (履歴を表示) を選択します。

SQL Server エージェントは DB インスタンスのマネージドホストで実行されているため、一部のアクションはサポートされていません。
+ ActiveX、Windows コマンドシェル、または Windows PowerShell を使用した、レプリケーションジョブの実行やコマンドラインスクリプトの実行はサポートされません。
+ SQL Server エージェントを手動で起動、停止、または再起動することはできません。
+ SQL Server エージェントを使用した E メール通知は、DB インスタンスからは使用できません。
+ SQL Server エージェントのアラートとオペレータはサポートされていません。
+ SQL Server エージェントを使用したバックアップの作成はサポートされていません。Amazon RDS を使用して DB インスタンスをバックアップします。
+ RDS for SQL Server は、現在、SQL Server エージェントトークンの使用をサポートしていません。

## SQL Server エージェントジョブレプリケーションをオンにする
<a name="SQLServerAgent.Replicate"></a>

SQL Server エージェントジョブレプリケーションは、次のストアドプロシージャを使用して有効にできます。

```
EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = 'SQLAgentJob';
```

ストアドプロシージャは、Amazon RDS for SQL Server でサポートされているすべての SQL Server バージョンで実行できます。以下のカテゴリのジョブがレプリケートされます。
+ [未分類 (ローカル)]
+ [未分類 (マルチサーバー)]
+ [未分類]
+ データコレクター
+ データベースエンジンチューニングアドバイザー
+ データベースメンテナンス
+ フルテキスト

T-SQL ジョブステップを使用するジョブのみがレプリケートされます。SQL Server Integration Services (SSIS)、SQL Server Reporting Services (SSRS)、レプリケーション、PowerShell などのステップタイプのジョブはレプリケートされません。データベースメールとサーバーレベルのオブジェクトを使用するジョブはレプリケートされません。

**重要**  
プライマリホストは、レプリケーションの信頼できるソースです。ジョブのレプリケーションをオンにする前に、SQL Server エージェントのジョブがプライマリであることを確認してください。これを行わない場合、新しいジョブがセカンダリホスト上にあるときにこの機能をオンにすると、SQL Server エージェントのジョブが削除される可能性があります。

次の関数を使用して、レプリケーションがオンになっているかどうかを確認できます。

```
SELECT * from msdb.dbo.rds_fn_get_system_database_sync_objects();
```

 SQL Server エージェントジョブがレプリケートされている場合、T-SQL クエリは以下を返します。レプリケートしていない場合は、`object_class` に対して何も返しません。

![SQL Server エージェントジョブがレプリケート中](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/SQLAgentJob.png)


次の関数を使用して、オブジェクトが UTC 時間で最後に同期された時刻を調べることができます。

```
SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();
```

例えば、01:00 に SQL Server エージェントジョブを変更するとします。直近の同期時刻は 01:00 以降になると予想されます。これは、同期が行われたことを示します。

同期後、セカンダリノードで `date_created` と `date_modified` に返される値は一致することが期待されます。

![サーバーオブジェクトが前回同期された時刻は 01:21:23 でした](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/SQLAgentJob_last_sync_time.png)


`tempdb` レプリケーションも使用している場合は、`@object_type` パラメータで指定することで、SQL Agent ジョブと `tempdb` 設定の両方のレプリケーションを有効にできます。

```
EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = 'SQLAgentJob,TempDbFile';
```

`tempdb` レプリケーションの詳細については、「[マルチ AZ 配置の TempDB 設定](SQLServer.TempDB.MAZ.md)」を参照してください。