第 1 章 「SQL Server エージェントの理解とオペレータの定義」 ~ SQL Server エージェントを有効に使ってますか ? ~

NEC

Eラーニング事業部

鈴木 智行

2002 年 9 月 24 日

目次

1. SQL Server エージェントの概要 1. SQL Server エージェントの概要
2. SQLServerAgent の実行 2. SQLServerAgent の実行
3.SQLServerAgent のサービスアカウント 3.SQLServerAgent のサービスアカウント
4. SQLServer エージェントのエラーログ 4. SQLServer エージェントのエラーログ
5. オペレータとは 5. オペレータとは
6. メールオペレータの作成 6. メールオペレータの作成
7. Net Send オペレータの作成 7. Net Send オペレータの作成

1. SQL Server エージェントの概要

SQL Server エージェントは SQL Server 2000 をインストールすると必ずインストールされるエンジンで、Windows NT や Windows 2000 ではサービス(サービス名は既定のインスタンスでは SQLServerAgent、名前付きインスタンスでは SQLAgent$ インスタンス名)として実装されます。このサービスは表 1-1 のコンポーネントから構成され、定期的あるいは予測できる管理業務の自動化を図ることができます。

コンポーネント名

説明

ジョブ

自動実行したい 1 つ以上のタスク(ジョブステップ)とスケジュールを定義する

警告

特定のイベントが発生した時の動作を定義する

オペレータ

電子メール、ポケットベル、net sendコマンド経由で送付可能な通知先を定義する

1-1 SQL Server エージェントを構成するコンポーネント

ジョブ/警告/オペレータの定義情報は SQL Server Enterprise Manager で簡単に作成でき、msdb システムデータベース中の以下のシステムテーブルで保持されます(表1-2)。

テーブル名

説明

sysalerts

各警告の情報

syscategories

ジョブ、警告、オペレータを取りまとめるカテゴリの情報

sysdownloadlist

マルチサーバー環境で全ての対象サーバーに向けたダウンロード命令の待つ行列

sysjobhistory

ジョブの実行情報の履歴

sysjobs

各ジョブの情報

sysjobschedules

ジョブのスケジュール情報

sysjobservers

マルチサーバー環境で特定のジョブと1つ以上の対象サーバーとの関連や関係

sysjobsteps

ジョブ内の各ジョブステップに関する情報

sysnotifications

警告に対しての通知するオペレータ、通知方法

sysoperators

各オペレータの情報

systargetservergroupmembers

マルチサーバー環境で各マルチサーバーグループに参加している対象サーバー

systargetservergroups

マルチサーバー環境に参加している対象サーバーグループ名

systargetservers

マルチサーバー環境に参加している対象サーバー

systaskids

以前のバージョンで作成されたタスクとジョブのマッピング

1-2 ジョブ / 警告 / オペレータの定義情報を格納するシステムテーブル

SQLServerAgent は、SQL Server に接続し msdb データベースに対してクエリを発行し、表 1-2 の情報を検索して有効なジョブや警告を判断します。このときの接続方法は SQL Server Enterprise Manager において SQL Server エージェントを右クリックし、「プロパティ」- [接続] タブで、Windows認証か SQL Server 認証のどちらかを指定できます。デフォルトでは SQLServerAgent のサービスアカウントとして定義されているアカウントを使用し、Windows 認証で SQL Server に接続します(画面 1-3)。

画面

画面 1-3 SQL Server への接続方法

以上のように SQLServerAgent は SQL Server に接続する必要があり、MSSQLServer との依存関係をもっています(画面1-4)。

画面

画面 1-4 SQLServerAgent の依存関係

2. SQLServerAgent の実行

SQL Server エージェントの恩恵を受けるためには、SQLServerAgent が開始されていなくてはいけません。しかし SQL Server 2000 のデフォルトのインストールではサービスのスタートアップの種類が 「手動」 になっており、OS の起動や MSSQLServer の開始を行っても、SQLServerAgent は開始しません。もちろん手動でも開始できますが、SQL Server エージェントの役割を考えると常時実行していた方が良いでしょう。自動起動の設定はサービススナップインや SQL サービスマネージャでも指定できますが、SQL Server Enterprise Manager ではコンピュータを右クリックし、「プロパティ」-[全般]タブの「オペレーティングシステム起動時の自動起動のポリシー」 をチェックすることで、簡単に設定可能です(画面 2-1)

画面

画面 2-1 SQLServerAgent の自動起動の設定

また、これに加え SQLServerAgent が予期せず停止した場合に自動的にサービスを再開するように設定することも可能です。SQL Server エージェントを右クリックし、「プロパティ」- [詳細設定] タブの「予期しない停止時にSQL Server エージェントサービスを自動再起動」 にチェックすることで、常時実行のサポートも可能です(画面2-2)。

画面

画面 2-2 予期しない停止時の SQLServerAgent の自動再起動の設定

3.SQLServerAgent のサービスアカウント

SQL Server のセットアップ時に SQLServerAgent に対してサービスアカウントを割り当てます。ローカルシステムまたはドメインユーザーアカウントを使用することができ、デフォルトの設定では MSSQLServer と同じアカウントが使用されます(画面 3-1)。

画面

画面 3-1 SQLServerAgent のサービスアカウントの指定(セットアップ時)

ローカルシステムアカウントを指定した場合は、ユーザー名およびパスワードの指定は必要ありませんが、SQLServerAgent がネットワークアクセス権をもたず、以下のような処理を実行できなくなります。

  • 別なネットワーク上のリソースにアクセスする

  • マルチサーバージョブをセットアップする

  • メールで通知を行う

  • レプリケーション

それに対しドメインユーザーアカウントは OS への接続に使われるユーザー名とパスワードを使用するため、Windows 認証を利用してリモートサーバーと通信することが可能です。しかしドメインユーザーアカウントをサービスアカウントとして設定するためには、以下の要件が必要です。

  • サービスとしてログオン(セットアップ中に設定される)

  • 「パスワードを無期限にする」属性

  • 全てのログオン時間の許容

上記に加え、Administrators ローカルグループのメンバでない場合はさらに以下の権限が必要となります。

  • SQL Server ディレクトリへのアクセスと変更

  • データベースファイルへのアクセスと変更

  • SQLServer に関連するレジストリキーの読み取りおよび書き込み

したがって特別な事情がない限りは Administrators ローカルグループのメンバであるユーザーをドメインユーザーアカウントに指定した方が管理が簡単になるでしょう。

またこのサービスアカウントはセットアップ後にも変更することができます。SQL Server エージェントを右クリックし、「プロパティ」-[全般]タブの「サービス開始アカウント」で設定してください(画面 3-2)。

画面

画面 3-2 SQLServerAgent のサービスアカウントの指定(セットアップ後)

4. SQLServer エージェントのエラーログ

SQLServer エージェントのエラーログはデフォルトで C:\Program Files\Microsoft SQL Server\MSSQL\LOG フォルダ配下の SQLAGENT.OUT ファイルに格納されます。このエラーログは起動するたびに新規作成され、既存のエラーログファイルは SQLAGENT.n(n は 1~ の整数)の名前のファイルとしてアーカイブされ、保存されます。このエラーログファイルはメモ帳などのテキストエディタで確認することもできますが、SQL Server エージェントを右クリックし、「エラーログの表示」 で確認することもできます(画面 4-1)。

画面

画面 4-1 SQLServer エージェントのエラーログ表示

この表示では種類として WindowsNT や Windows2000 のイベントビューアと同じく情報、警告、エラーで分類されるため、管理者はこのエラーを用いて SQLServer エージェントのトラブルシューティングに役立てることが可能です。

5. オペレータとは

SQLServer エージェントを利用すれば管理業務の自動化が図れます。だからといって管理者は何もしなくて良いわけではありません。最低限 「スケジュールどおりに管理タスクが実行されたか」、「実行された管理タスクが正常に終了したか」 などのステータスを認識し、思わぬトラブルが発生した際には解決する必要があります。

SQLServer エージェントは管理タスクのステータスを簡単に通知することができ、この通知相手のことを 「オペレータ」 といいます。事前にオペレータを作成し、通知先として定義しておけば、その場にいなくても管理タスクの状況を確認することが可能です(図 5-1)。

画面

画面 5-1 オペレータへの通知イメージ

オペレータは通知の仕方によって以下の 3 つに分類されます。

  • メールオペレータ

  • ポケットベルオペレータ

  • Net Send オペレータ

上記の中で、メールオペレータとポケットベルオペレータはメール環境のセットアップ、Net Send オペレータは WindowsNT4.0 または Windows 2000 オペレーティングシステムを実行している必要があります。

6. メールオペレータの作成

SQL Server エージェントは MAPI-1 クライアントを通して Microsoft Exchange Server、Microsoft Windows NT Mail、または Post Office Protocol3(POP3)サーバーと接続することができます。この SQL Server エージェントのメール機能を SQLAgentMail と呼び、MSSQLServer によって提供されるメール機能(SQLMail)と区別しています。

今回はサーバーに Microsoft Exchange 2000 Server、クライアントに Microsoft Outlook 2000 使用した環境を例にとってメールオペレータを作成します。

SQL Server はメールサーバー上、メールクライアント上のどちらに実装しても構いませんが、負荷を考慮するとメールクライアント上に実装する方が推奨されます(図5-2)

画面

画面 6-1 今回のメール環境の例

前提条件として 3 で記述したとおり、SQLServerAgent のサービスアカウントはドメインユーザーアカウントである必要があります。

このサービスアカウントがメールを利用できるように Outlook でメールプロファイルを作成します。デフォルトは MS Exchange の設定という名前ですが、今回は SQLServiceProfile という名前でメールプロファイルを作成しました(画面 6-2)。

画面

画面 6-2 SQLServerAgent サービスアカウントのメールプロファイル

次に SQL Server Enterprise Manager において SQL Server エージェントを右クリックし、「プロパティ」- [全般] タブのメールセッションで上記で作成したメールプロファイルを選択します(画面 6-3)。

画面

画面 6-3 メールプロファイルの選択

選択後は [テスト] ボタンを押下し、SQLAgentMail が動作することを確認してください(画面 6-4)。(この後、SQLServerAgent の再起動が必要になります)

画面

画面 6-4 SQLAgentMail の動作確認

以上で SQLAgentMail の環境が完成したので、メールオペレータの作成に移ります。 [SQL Server エージェント] - [オペレータ] を右クリックし、「新規オペレータ」-[全般] タブで名前およびメールのログイン名を入力します。ログイン名は右のボタンを押下しても選択できますが、Microsoft Exchange 2000 Server の場合は FQDN 名で入力しなくてはいけないので注意してください(画面6-5)。

画面

画面 6-5 メールオペレータの作成

指定後は [テスト] ボタンを押下し、メール通知が動作することを確認してください(画面6-6)。

画面

画面 6-6 メール通知の確認

以上でメールオペレータの作成は終了です。なお、ポケットベルオペレータを作成する場合にも上記と同様のメール環境が必要であり、それに加えサードパーティによるポケットとメール間のソフトウェアとハードウェアを設定する必要があります。

7. Net Send オペレータの作成

Net Send オペレータには上記のような環境設定はほとんどの場合必要ありません。例えば OS として Windows2000 を使用していれば、デフォルトでスタートアップ時に自動起動になっている Messenger サービスを通じて Net Send 通知を行っているからです。

Net Send オペレータの作成にはメールオペレータと同じインタフェースを使用します。[SQL Server エージェント] - [オペレータ] を右クリックし、「新規オペレータ」-[全般] タブで名前および Net Send アドレス(コンピュータまたはユーザー)を入力します。オペレータには複数の通知方法を指定できるため、今回は SQLServer 管理者をメールオペレータおよび Net Send オペレータとして定義しました。定義後は [テスト] ボタンを押下し、Net Send 通知が動作することを確認してください(画面 7-1)。

画面

画面 7-1 Net Send オペレータの作成と Net Send 通知の確認

次回は SQLServer エージェントの中枢コンポーネントであるジョブについてご紹介します。オペレータは次回も出てきますので忘れないようにしておいてください。

sysbuild.jpg

鈴木 智行: NEC Eラーニング事業部に所属。 入社以来、インストラクタとして教育業務に従事。汎用機、UNIX を経て、1994 年より マイクロソフト認定トレーナー (MCT) として、管理者向け教育を担当。SQL Server は 4.21a から携わっており、現在は主に SQL Server 2000 に関わるデータベース教育を中心に担当。Windows 2000 および SQL Server 2000 での MCSA, MCSE, MCDBA を取得しており、情報処理技術者試験のテクニカルエンジニア (データベース) も取得済。最近は MCA の 3 科目 (データベース、OS/ネットワーク、アプリケーション構築) 全てに合格し、C# を勉強中。