SQL Server エージェントの使用 - Amazon Relational Database Service

SQL Server エージェントの使用

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 エージェントを参照してください。

注記

DB インスタンスのメンテナンスおよびバックアップウィンドウ中に実行されるジョブをスケジュールすることは避けてください。AWS によって起動されたメンテナンスおよびバックアッププロセスによって、ジョブが中断されたり、ジョブがキャンセルされたりする可能性があります。

マルチ AZ 配置では、ジョブのレプリケーション機能がオンになっているとき、SQL Server エージェントジョブは、プライマリホストからセカンダリホストにレプリケートされます。詳細については、「SQL Server エージェントジョブレプリケーションをオンにする」を参照してください。

マルチ AZ 配置は、SQL Server エージェントジョブの数が 10,000 に制限されています。制限の引き上げが必要な場合は、AWS Support に連絡して緩和をリクエストしてください。AWS Support センターのページを開き、必要に応じてサインインし、[ケースの作成] を選択します。[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 エージェントジョブレプリケーションをオンにする

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 エージェントジョブがレプリケート中

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

SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();

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

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

サーバーオブジェクトが前回同期された時刻は 01:21:23 でした

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

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

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

SQLAgentUser ロールへのユーザーの追加

SQL Server エージェントにログインまたはユーザーを追加できるようにするには、マスターユーザーとしてログインし、次の操作を行ってください。

  1. CREATE LOGIN コマンドを使用して、別のサーバーレベルログインを作成します。

  2. msdb コマンドを使用して CREATE USER にユーザーを作成し、このユーザーを前の手順で作成したログインにリンクします。

  3. SQLAgentUserRole システムストアドプロシージャを使用して、sp_addrolemember にユーザーを追加します。

例えば、マスターユーザー名が admin で、ユーザー名が theirname、パスワードが theirpassword のユーザーに SQL Server エージェントへのアクセスを許可するとします。その場合は、以下の手順を使用できます。

SQLAgentUser ロールにユーザーを追加するには
  1. マスターユーザーとしてログインします。

  2. 以下のコマンドを実行します。

    --Initially set context to master database USE [master]; GO --Create a server-level login named theirname with password theirpassword CREATE LOGIN [theirname] WITH PASSWORD = 'theirpassword'; GO --Set context to msdb database USE [msdb]; GO --Create a database user named theirname and link it to server-level login theirname CREATE USER [theirname] FOR LOGIN [theirname]; GO --Added database user theirname in msdb to SQLAgentUserRole in msdb EXEC sp_addrolemember [SQLAgentUserRole], [theirname];

SQL Server エージェントジョブの削除

sp_delete_job ストアドプロシージャを使用して、Amazon RDS for Microsoft SQL Server の SQL Server エージェントジョブを削除します。

SSMS を使用して SQL Server エージェントジョブを削除することはできません。これを試みると、次のようなエラーメッセージが表示されます。

The EXECUTE permission was denied on the object 'xp_regread', database 'mssqlsystemresource', schema 'sys'.

マネージド型サービスとしての RDS では、Windows レジストリにアクセスする手順の実行が制限されています。SSMS を使用すると、RDS が承認されていないプロセス (xp_regread) の実行を試みます。

注記

RDS for SQL Server では、sysadmin ロールのメンバーのみが、別のログインが所有するジョブを更新または削除できます。

SQL Server エージェントジョブを削除するには
  • 次の T-SQL ステートメントを実行します。

    EXEC msdb..sp_delete_job @job_name = 'job_name';