SQL Server エージェント
適用対象:SQL Server
Azure SQL Managed Instance
この記事では、SQL Server および Azure SQL Managed Instance でスケジュールされた管理タスク (ジョブと呼ばれます) を実行する Microsoft Windows サービスである SQL Server エージェントの概要について説明します。
大事な
Azure SQL Managed Instance では、SQL Server エージェントのほとんどの機能が現在サポートされているわけではありません。 詳細については、Azure SQL Managed Instance の T-SQL と SQL Server の違いの を参照してください。
SQL Server エージェントの利点
SQL Server エージェントは、SQL Server を使用してジョブ情報を格納します。 ジョブには、1 つ以上のジョブ ステップが含まれています。 各ステップには、データベースのバックアップなど、独自のタスクが含まれています。
SQL Server エージェントは、特定のイベントに応じて、またはオンデマンドで、スケジュールに従ってジョブを実行できます。 たとえば、すべての会社のサーバーを平日の毎時間後にバックアップする場合は、このタスクを自動化できます。 月曜日から金曜日の 22:00 以降に実行するようにバックアップをスケジュールします。 バックアップで問題が発生した場合、SQL Server エージェントはイベントを記録して通知できます。
手記
既定では、ユーザーがサービスの自動開始を明示的に選択しない限り、SQL Server エージェント サービスは SQL Server のインストール時に無効になります。
SQL Server エージェント コンポーネント
SQL Server エージェントでは、次のコンポーネントを使用して、実行するタスク、タスクを実行するタイミング、タスクの成功または失敗を報告する方法を定義します。
SQL Server Configuration Manager を使用して SQL Server エージェント サービスを管理し、SQL Server Management Studio (SSMS) 使用して、グラフィカル ユーザー インターフェイスで SQL Server エージェントのプロパティ、ジョブ、アラート、演算子、プロキシを簡単に管理します。
仕事
ジョブ は、SQL Server エージェントが実行する指定された一連のアクションです。 ジョブを使用して、1 回以上実行し、成功または失敗を監視できる管理タスクを定義します。 ジョブは、1 つのローカル サーバーまたは複数のリモート サーバーで実行できます。
大事な
SQL Server フェールオーバー クラスター インスタンスでフェールオーバー イベントが発生したときに実行されている SQL Server エージェント ジョブは、別のフェールオーバー クラスター ノードへのフェールオーバー後に再開されません。 Hyper-V ノードの一時停止時に実行されている SQL Server エージェント ジョブは、一時停止によって別のノードへのフェールオーバーが発生しても再開されません。 フェールオーバー イベントが原因で開始されるが完了に失敗したジョブは、開始としてログに記録されますが、完了または失敗に関する追加のログ エントリは表示されません。 これらのシナリオの SQL Server エージェント ジョブは、終了したことがないようです。
作業はいくつかの方法で実行できます。
1 つ以上のスケジュールに従います。
1 つ以上のアラートに応答します。
sp_start_job
ストアド プロシージャを実行します。
ジョブ内の各アクションは ジョブ ステップです。 たとえば、ジョブ ステップは、Transact-SQL ステートメントの実行、SSIS パッケージの実行、Analysis Services サーバーへのコマンドの発行などで構成される場合があります。 ジョブ ステップは、ジョブの一部として管理されます。
各ジョブ ステップは、特定のセキュリティ コンテキストで実行されます。 Transact-SQL を使用するジョブ ステップの場合は、EXECUTE AS ステートメントを使用して、ジョブ ステップのセキュリティ コンテキストを設定します。 その他の種類のジョブ ステップの場合は、プロキシ アカウントを使用して、ジョブ ステップのセキュリティ コンテキストを設定します。
sp_help_job システム ストアド プロシージャを使用して、特定のジョブに関する情報を確認します。 ジョブに関する情報を表示するには、dbo.sysjobs システム テーブルを使用します。 たとえば、次の Transact-SQL (T-SQL) ステートメントを使用して、サーバー上のすべてのジョブに関する情報を表示します。
USE MSDB
GO
SELECT job_id, [name] FROM dbo.sysjobs;
スケジュール
ジョブを実行するタイミングを指定するのが スケジュール です。 同じスケジュールで複数のジョブを実行でき、複数のスケジュールを同じジョブに適用できます。 スケジュールでは、ジョブが実行される時刻に対して次の条件を定義できます。
SQL Server エージェントが起動するたびに。
コンピューターの CPU 使用率が、あなたが待機状態と定義したレベルにあるときには常に。
特定の日時に 1 回。
定期的なスケジュール。
詳細については、「ジョブにスケジュールを作成してアタッチする」を参照してください。
アラート
アラート は、特定のイベントに対する自動応答です。 たとえば、イベントは、開始するジョブや、特定のしきい値に達するシステム リソースです。 アラートが発生する条件を定義します。
アラートは、次のいずれかの条件に応答できます。
SQL Server イベント
SQL Server のパフォーマンス条件
SQL Server エージェントが実行されているコンピューター上の Microsoft Windows Management Instrumentation (WMI) イベント
アラートでは、次のアクションを実行できます。
1 つ以上のオペレーターに通知する
ジョブを実行する
詳細については、「アラートの」を参照してください。
演算子
オペレーター は、SQL Server の 1 つ以上のインスタンスのメンテナンスを担当する個人の連絡先情報を定義します。 一部の企業では、オペレーターの責任が 1 人の個人に割り当てられます。 複数のサーバーを持つ企業では、多くの個人がオペレーターの責任を共有できます。 オペレーターにはセキュリティ情報が含まれていないので、セキュリティ プリンシパルは定義されません。
SQL Server は、... を介してオペレーターにアラートを通知できます。
電子メール
ポケットベル (電子メール経由)
net send
手記
net send 使用して通知を送信するには、SQL Server エージェントが存在するコンピューターで Windows Messenger サービスを開始する必要があります。
大事な
将来のバージョンの SQL Server では、ポケットベルおよび net send オプションが SQL Server エージェントから削除されます。 新しい開発作業ではこれらの機能を使用しないでください。また、現在これらの機能を使用しているアプリケーションを変更することを計画してください。
電子メールまたはページラーを使用してオペレーターに通知を送信するには、データベース メールを使用するように SQL Server エージェントを構成する必要があります。 詳細については、「データベース メール」を参照してください。
オペレーターは、個人のグループの別名として定義できます。 この方法では、そのエイリアスのすべてのメンバーが同時に検証されることはありません。 詳細については、演算子を参照してください。
SQL Server エージェント管理のセキュリティ
SQL Server エージェントは、SQLAgentUserRole、SQLAgentReaderRole、および sqlAgentOperatorRolemsdb
データベース内の固定データベース ロールを使用して、sysadmin 固定サーバー ロールのメンバーではないユーザーの SQL Server エージェントへのアクセスを制御します。 これらの固定データベース ロールに加えて、サブシステムとプロキシは、データベース管理者が各ジョブ ステップを、そのタスクの実行に必要な最小限のアクセス許可で確実に実行するのに役立ちます。
役割
SQLAgentUserRole、SQLAgentReaderRole、および SQLAgentOperatorRole msdb
の固定データベース ロールのメンバーと、sysadmin 固定サーバー ロールのメンバーは、SQL Server エージェントにアクセスできます。 これらのロールに属していないユーザーは、SQL Server エージェントを使用できません。 SQL Server エージェントで使用されるロールの詳細については、「SQL Server エージェント セキュリティの実装」を参照してください。
サブシステム
サブシステムは、ジョブ ステップで使用できる機能を表す定義済みのオブジェクトです。 各プロキシは、1 つ以上のサブシステムにアクセスできます。 サブシステムは、プロキシで使用できる機能へのアクセスを区切るため、セキュリティを提供します。 各ジョブ ステップは、Transact-SQL ジョブ ステップを除き、プロキシのコンテキストで実行されます。 ジョブ ステップ Transact-SQL EXECUTE AS コマンドを使用して、セキュリティ コンテキストをジョブの所有者に設定します。
SQL Server では、次の表に示すサブシステムが定義されています。
サブシステム名 | 説明 |
---|---|
Microsoft ActiveX スクリプト | ActiveX スクリプト ジョブ ステップを実行します。 警告 ActiveX スクリプト サブシステムは、今後のバージョンの Microsoft SQL Server で SQL Server エージェントから削除されます。 新しい開発作業ではこの機能を使用しないでください。現在この機能を使用しているアプリケーションを変更することを計画してください。 |
オペレーティング システム (CmdExec) | 実行可能プログラムを実行します。 |
PowerShell | PowerShell スクリプト ジョブ ステップを実行します。 |
レプリケーション ディストリビューター | レプリケーションディストリビューションエージェントをアクティブにするジョブステップを実行します。 |
レプリケーションマージ | レプリケーション マージ エージェントをアクティブにするジョブ ステップを実行します。 |
レプリケーション キュー リーダー | レプリケーション キュー リーダー エージェントをアクティブにするジョブ ステップを実行します。 |
レプリケーション スナップショット | レプリケーション スナップショット エージェントをアクティブにするジョブ ステップを実行します。 |
レプリケーション トランザクション ログ リーダー | レプリケーション ログ リーダー エージェントをアクティブにするジョブ ステップを実行します。 |
Analysis Services コマンド | Analysis Services コマンドを実行します。 |
Analysis Services クエリ | Analysis Services クエリを実行します。 |
SSIS パッケージの実行 | SSIS パッケージを実行します。 |
手記
Transact-SQL ジョブ ステップはプロキシを使用しないため、Transact-SQL ジョブ ステップ用の SQL Server エージェント サブシステムはありません。
SQL Server エージェントは、通常、プロキシのセキュリティ プリンシパルにジョブ ステップでタスクを実行するアクセス許可がある場合でも、サブシステムの制限を適用します。 たとえば、sysadmin 固定サーバー ロールのメンバーであるユーザーのプロキシは、ユーザーが SSIS パッケージを実行できる場合でも、プロキシが SSIS サブシステムにアクセスできない限り、SSIS ジョブ ステップを実行できません。
プロキシ
SQL Server エージェントはプロキシを使用してセキュリティ コンテキストを管理します。 プロキシは、複数のジョブ ステップで使用できます。 固定サーバー ロール sysadmin のメンバーは、プロキシを作成できます。
各プロキシは、セキュリティ資格情報に対応します。 各プロキシは、一連のサブシステムとログインのセットに関連付けることができます。 プロキシは、プロキシに関連付けられているサブシステムを使用するジョブ ステップにのみ使用できます。 特定のプロキシを使用するジョブ ステップを作成するには、ジョブ所有者は、そのプロキシに関連付けられているログインを使用するか、プロキシに無制限にアクセスできるロールのメンバーを使用する必要があります。 sysadmin 固定サーバー ロールのメンバーは、プロキシに無制限にアクセスできます。 SQLAgentUserRole、SQLAgentReaderRole、または SQLAgentOperatorRole のメンバーは、特定のアクセス権が付与されているプロキシのみを使用できます。 これらの SQL Server エージェント固定データベース ロールのメンバーである各ユーザーには、特定のプロキシへのアクセス権が付与されている必要があります。これにより、ユーザーはそれらのプロキシを使用するジョブ ステップを作成できます。
管理の自動化
SQL Server の管理を自動化するように SQL Server エージェントを構成するには、次の手順に従います。
定期的に発生する管理タスクまたはサーバー イベントと、これらのタスクまたはイベントをプログラムで管理できるかどうかを確認します。 タスクは、予測可能な一連のステップが含まれており、特定の時刻または特定のイベントに応答して発生する場合に、自動化の候補として適しています。
SQL Server Management Studio、Transact-SQL スクリプト、または SQL Server 管理オブジェクト (SMO) を使用して、ジョブ、スケジュール、アラート、および演算子のセットを定義します。 詳細については、「ジョブの作成」を参照してください。
定義した SQL Server エージェント ジョブを実行します。
手記
SQL Server の既定のインスタンスの場合、SQL Server サービスの名前は SQLSERVERAGENT です。 名前付きインスタンスの場合、SQL Server エージェント サービスの名前は SQLAgent$instancenameです。
SQL Server の複数のインスタンスを実行している場合は、マルチサーバー管理を使用して、すべてのインスタンスで共通のタスクを自動化できます。 詳細については、「エンタープライズ 全体の自動管理」を参照してください。
SQL Server エージェントの使用を開始するには、次のタスクを使用します。
説明 | 記事 |
---|---|
SQL Server エージェントを構成する方法について説明します。 | SQL Server エージェント の構成 |
SQL Server エージェント サービスを開始、停止、一時停止する方法について説明します。 | SQL Server エージェント サービスの開始、停止、または一時停止 |
SQL Server エージェント サービスのアカウントを指定する際の考慮事項について説明します。 | SQL Server エージェント サービスのアカウントを選択 |
SQL Server エージェントのエラー ログを使用する方法について説明します。 | SQL Server エージェント エラーログ |
パフォーマンス オブジェクトの使用方法について説明します。 | パフォーマンス オブジェクト を使用する |
メンテナンス プラン ウィザードについて説明します。これは、ジョブ、アラート、オペレーターの作成を使用して SQL Server のインスタンスの管理を自動化するユーティリティです。 | メンテナンス プラン ウィザードを使用する |
SQL Server エージェントを使用して管理タスクを自動化する方法について説明します。 | 自動管理タスクの (SQL Server エージェント) |
NOSQLPS
SQL Server 2019 以降では、SQLPS を無効にすることができます。 PowerShell の種類のジョブ ステップの最初の行で、sql エージェントが SQLPS モジュールの自動読み込みを停止する #NOSQLPS
を追加できます。 これで、SQL エージェント ジョブによって、マシンにインストールされている PowerShell のバージョンが実行され、その後、任意の他の PowerShell モジュールを使用できるようになります。
SQL エージェント ジョブ ステップで SqlServer モジュール を使用するには、スクリプトの最初の 2 行にこのコードを配置します。
#NOSQLPS
Import-Module -Name SqlServer
関連コンテンツ
- 表面積の設定
- PowerShell を使用して SQL Server エージェントを する