今回の記事では、SQL Server初心者向けの記事として、Microsoft製RDBMS「SQL Server」の機能である「ジョブ」の設定方法を解説していきます。
「ジョブ」を上手く活用することで様々な処理を自動化することができます。
是非参考にしてください。
SQL Serverの「ジョブ」とは
簡単に言えば、SQL Serverに組み込まれた「スケジューラー」機能です。
決められた時間に指定した処理を自動的に実行させることができます。
同様の機能では、Windows Serverの標準機能である「タスクスケジューラー」や、Linux系OSで用意されている「crontab」などがあります。
OS側で用意されているスケジューラー機能とSQL Serverのスケジューラー機能である「ジョブ」を適切に使い分けることが必要です。
尚、SQL Serverの「ジョブ」はデータベース機能を提供するサービスとは分離されており、「SQL Server エージェント」というサービスで実行されます。
ジョブの詳しい解説は、Microsoftの公式ドキュメントをご確認ください。
「ジョブ」を利用するメリット
スケジューラー機能として、OS側で用意している機能もあると説明しましたが、OS側のスケジューラー機能ではなく、SQL Serverの「ジョブ」を利用するメリットを紹介していきます。
ジョブ内の「ステップ」に様々な処理を登録可能
SQL Serverのジョブは、一つのジョブ内に複数の「ステップ」を作成できます。
この「ステップ」では、個々に処理を登録することができます。
ステップに登録できる処理は、UPDATE文などのSQL実行や、バックアップやリストアなどのSQL Serverのメンテナンス系コマンドの実行が可能です。
また、SQLは、Transact-SQLが登録できるため、IFなどでの条件分岐や、ループ処理、変数なども使用できます。
後、Windows自体のコマンド実行や、PowerShellを実行する機能も提供しています。
よって、SQL Serverのジョブを活用することで、SQL Serverを起点とした様々な処理を自動化することが可能です。
「ステップ」毎のアクションを組み合わせて柔軟なジョブが組める
個々のステップごとに、処理に成功した場合と失敗した場合に以下の三パターンの「アクション」の指定ができます。
- 次のステップに進む
- 成功を報告してジョブを終了する
- 失敗を報告してジョブを終了する
ジョブで作成した一連のステップにおいて、どれか一つでも失敗が発生したら管理者に通知を出しつつ、以降のステップには進めずジョブを終了させるといったステップ構成を組んだり、ステップに失敗しても無視して次のステップに進めるといった構成も組めます。
また、ステップ毎に再試行する回数を設定したり、再試行する場合の待機時間を設定することも可能です。
このあたりの、ステップ毎の細かい設定を活用することで、複雑なジョブを作ることも可能です。
「ジョブ」を使用する場合の注意点
これまで「ジョブ」を使用しておらず、これからジョブを活用しようと考えている場合は、「SQL Server エージェント」サービスの自動起動設定を必ず確認してください。
前項でも記載しましたが、「ジョブ」は「SQL Server エージェント」という名前のサービスで動いています。
このサービスは、SQL Serverをインストール際に併せてインストールされますが、既定の設定では、「SQL Server エージェント」の「スタートアップの種類」は「無効」が指定されます。
この場合、OSの再起動や、SQL Server本体のサービスの再起動に伴って「SQL Server エージェント」サービスを停止した後に、自動的に「SQL Server エージェント」サービスは起動してきてくれません。
SQL Server本体のサービスは起動しておりデータベースへの接続は問題無いことで、このエージェントが起動していないことに気付かず、後になってスケジュールで動く予定になっていたバッチ処理が動いていなかったり、バックアップが実行できていないといった致命的なトラブルが起こる可能性があります。
よって、ジョブを新しく作成する場合は、必ずサービスの一覧画面から「SQL Server エージェント」サービスのプロパティを表示して、「スタートアップの種類」を「無効」→「自動」に変更するようにしてください。
「ジョブ」の設定方法の各設定項目の解説
当項では、SQL Serverの「ジョブ」を設定するやり方とその設定項目の解説をしていきます。
尚、当記事では、SQL Server Management Studio(以下「SSMS」と呼称)にて実施しています。
SSMSを起動し「新しいジョブ」を表示
SSMSを起動して、saでログインします。
ロール「sysadmin」が付与されているユーザーがsa以外に居るならそのユーザーでSSMSにログインしてもらえれば「SQL Server エージェント」の操作は可能です。
「オブジェクトエクスプローラー」の「SQL Server エージェント」内の「ジョブ」を「右クリック」して、「新しいジョブ」を選択します。
新しいジョブ「全般」
ジョブの新規作成画面が表示されます。
項目名 | 説明 |
---|---|
名前 | ジョブの名前を入力します。 |
所有者 | このジョブの所有者を指定します。 既定値では、現在ログインしているユーザーが指定されます。 |
カテゴリ | 既存のカテゴリ、又は新しく作成したカテゴリを指定できますが、未選択でも問題ありません。 今回は「未カテゴリ化」のまま先に進みます。 |
説明 | 必要によって入力します。 |
有効 | もしチェックが付いていなければチェックを付けておきます。 |
新しいジョブ「ステップ」
一つのジョブには、複数の処理を「ステップ」として登録ができます。
後述しますが、登録項目は大きく「全般」と「詳細設定」の二つに分かれています。
画面下部の「新規作成」を選択します。
新しいジョブ ステップ「全般」
ステップの設定項目の「全般」を解説します。
項目名 | 説明 |
---|---|
ステップ名 | 任意のステップの名前を入力します。 |
種類 | ステップで実行する処理の種類を選択します。 SQLを実行してテーブルのデータを更新したり、BACKUPコマンドを実行してデータベースのバックアップをする場合は、「Transact-SQL スクリプト(T-SQL)」を選択します。 |
実行するアカウント | 前述した「種類」に「Transact-SQL スクリプト(T-SQL)」を選択している場合は何も表示されません。 それ以外の「種類」を選択した場合は、その種類に合ったアカウント名が表示されます。 |
データベース | 「種類」に「Transact-SQL スクリプト(T-SQL)」と「レプリケーション キューリーダー」を選択した場合のみ当選択項目が表示されます。 ジョブを実行するデータベースを指定します。 既定値はmasterです。 通常はmasterで良いですが、実行する処理によって個々のデータベースを指定します。 |
コマンド | 種類に「Transact-SQL スクリプト(T-SQL)」を選択している場合は、SQL文やSQL Server用のコマンドをこの枠に直接入力します。 種類の名前の通り、Transact-SQLを書けるため、IF文などの制御構文や、変数なども使用できます。 また、RESTOREコマンドやBACKUPコマンドもこちらから指定できます。 |
「種類」で選択できる項目は以下です。
「コマンド」にSQL文を登録する場合の例
USE [データベース名]
UPDATE テーブル名 SET 列名2 = 値 WHERE 列名1 = 条件;
バックアップコマンドを登録する場合の例
BACKUP DATABASE [データベース名] TO DISK = N'C:\バックアップファイルフルパス.bak' WITH INIT
新しいジョブ ステップ「詳細設定」
ステップの設定項目の「詳細設定」を解説します。
項目名 | 説明 |
---|---|
成功した場合のアクション | このステップで実行した処理が成功した場合にどのアクションを移るかを指定します。 |
失敗した場合のアクション | このステップで実行した処理が失敗した場合にどのアクションを移るかを指定します。 |
「成功した場合のアクション」では、ステップが一つ、又は複数あった場合にその最後のステップに対して「成功を報告してジョブを終了する」を指定します。
また、「失敗した場合のアクション」では、ステップが失敗したら、それ以降のステップを実行せずに終了させる場合は「失敗を報告してジョブを終了する」を指定し、失敗を無視して次のステップに進めたい場合は「次のステップに進む」を指定します。
新しいジョブ「スケジュール」
登録したジョブを自動実行させるには、「スケジュール」に登録する必要があります。
スケジュールを登録することで、指定した日時に実行させたり、毎日決まった時間に実行させることが可能になります。
尚、スケジュールには登録せず、ジョブを手動で実行させることも可能です。
また、SQL Server に登録したジョブを実行するbatファイルを、Windows Serverの「タスクスケジューラー」に登録し、タスクスケジューラーから定時実行させることも可能です。
新しくスケジュールを作成する場合は、「新規作成」を選択します。
以下の画面からスケジュールの詳細を設定します。
※設定内容は画面の表示項目のままであり、当記事では割愛します。
尚、スケジュールは複数登録することができるため、スケジュールを複数作り、それらを組み合わせることにより、複雑なスケジュールを作成することも可能です。
新しいジョブ「警告」と「通知」
「警告」と「通知」は組み合わせて設定することが多い機能です。
「警告」では、Windows のイベントログに書き込まれたログを取得して、設定した条件に合うログを検出したら何らかのアラートを出します。
「追加」を選択すると以下の画面が表示されます。
「通知」では、上記の「警告」や、ジョブの成功や失敗などをトリガーとして、それを管理者に通知する機能です。
特に「通知」はジョブの成功や失敗を電子メールで通知するといったことも可能であり、活用できると大変便利ですが、設定が複雑です。
幣ブログの過去の記事で、ジョブの「通知」を使ってメール送信する方法を紹介しております。
興味があれば、以下の記事も参考にしてください。
新しいジョブ「対象サーバー」
SQL Server では「マルチサーバー」と言う機能があり、マルチサーバー機能を利用することで、異なるインスタンスのSQL Serverのジョブを一元的に管理することが可能です。
マルチサーバーでは、1台のマスターサーバー(MSX)と複数台のターゲットサーバー(TSX)で構成されます。
マスタサーバーで作成したジョブはターゲットサーバーへも配信され、ジョブの実行なども管理できます。
この「マルチサーバー」機能を利用している場合は、この画面からターゲットサーバーを選択できます。
マルチサーバー機能を利用していない場合は、「ローカルサーバーを対象とする」しか選択できません。
最後に
今回の記事では、SQL Serverの「ジョブ」の作成経験が無い人を対象に、基本的なジョブの設定方法を紹介させていただきました。
ジョブでは、データ更新系のバッチ処理でも活用できますが、最も一般的な使い方はデータベースのバックアップではないでしょうか。
弊ブログでは、異なるサーバー(インスタンス)間でジョブを利用し、バックアップとリストアを実行してデータ同期をする実装例も紹介しています。
良ければこちらも参考にしてください。※この記事は内容が古いのでいつか書き直したいと思っています。
ジョブを活用すれば、様々な処理が効率良く自動化できます。
是非活用してください。
今回も長々と読んでいただきましてありがとうございました。
それでは皆さまごきげんよう!