「SAP Basis概要の教科書」No.7 SAPジョブ管理の概要
INDEX LINK
1.はじめに
今回はSAPのバックグラウンドジョブについてお話したいと思います。バックグラウンドジョブの必要性、ジョブの種類、登録方法、実行結果の確認などをご説明いたします。
2.ダイアログとバックグランド処理
以前のコラムの中で、ワークプロセスの中にダイアログワークプロセスとバックグラウンドワークプロセスが存在することをお話ししました。ダイアログワークプロセスは主にエンドユーザの処理に利用され、素早い応答時間を要求されます。このため、ダイアログワークプロセスは長時間実行される処理では極力使わないようにする必要があります。長時間実行、多数のプロセスが利用されると空きがなくなり、他の人がすみやかにプロセスを利用できず待ち状態が発生するためです。そこで、長時間実行されるような処理はジョブ化しバックグランドプロセスで実行させる仕組みがSAPシステムにも備わっています。それをバックグランドジョブと呼びます(以下ジョブと記載)。
3.ジョブとして実行できる処理
ジョブとして実行できるものは以下3種類あります。
3-1.ABAPプログラム
最も頻繁に利用するもので、Basis運用でも何度も触れることになります。
SAP標準のプログラムだけではなく、アドオンプログラム(名称がZやYで始まるもプログラム)をジョブとして実行できます。プログラムで使用するバリアント(入力パラメータ)も指定できます。
3-2.外部プログラム
WindowsのバッチプログラムやLinuxのシェルなどのスクリプトをSAPジョブとして実行させます。例えば、SAPシステムから出力されたファイルを圧縮して別の場所にコピーするというようなバッチコマンドを作り、これをジョブとして登録することでファイルを別の場所へ保存することが可能になります。
3-3.外部コマンド
任意のOSコマンドをSAPの外部コマンドとして登録し(トランザクションコード:SM69)、それをジョブとして登録・実行させることができます。例えば、上述の外部プログラムほど複雑な処理ではなく、単純にOSディレクトリのリストをプリントする、DIRやlsコマンドやディレクトリ作成のMKDIRコマンドなどを利用することができます。
4.ジョブの開始基準
SAPのジョブはトランザクションコード:SM36で登録します。その際、様々な開始条件を指定することができます。
4-1.即時実行
ジョブ作成後即時に実行します。臨時対応などですぐ実行する必要がある場合に設定します。
4-2.特定日実行
これも臨時対応などで繰り返し実行する必要がないが、すぐではなく実行日を指定して実行させたい場合に使います。例えばシステムメンテナンス日に1回だけ実行したいジョブなどはこれを指定します。
4-3.周期実行
これが最も多く利用される基準になります。毎週何曜日、毎日何時からというような指定をします。SAPシステムの夜間バッチ処理などは、この周期実行設定を使います。
4-4.特定のイベント発生後に実行
先行のジョブAが完了したら、実行するなど、先行・後続の関係を指定したい場合に使用します。
5.ジョブの優先順位について
ジョブ登録時に優先順位を指定することができます。(A~C)優先的に実行完了させる必要があるジョブの優先度を上げて登録します。例えば、同時刻に複数のジョブを登録し、その中の1ジョブだけ所定の時間内に確実に完了させる必要がある。その場合、そのジョブを優先度A,残りのジョブを優先度BまたはCと指定します。ただ、一般的なSAPプロジェクトでは、優先度は全てデフォルトのCのままにし、JP1やTivoliなどの外部ジョブ管理ソフトで時間や連携を制御し、決められた時間内にジョブが完了するように設計します。ここでは、あくまでこのような機能があるということだけ抑えて頂ければと思います。
6.ジョブの実行状態の遷移について
ジョブは登録してすぐ動き出すのではなく、状態遷移が管理されています。
以下にジョブの状態遷移の流れを示します。
6-1.計画済
ジョブを登録、または既存のジョブをコピーして作成した直後の状態です。
この状態では実行するためのジョブが出来上がった状態なので、勝手に動き出すことはありません。この計画済のジョブは例えば、これをコピーして別のジョブを作成するなどテンプレートジョブとして使うことがあります。
6-2.リリース済
計画済のジョブをリリースすると、リリース済ステータスに変わります。上述した開始基準で指定した条件になるまで(開始時刻になるまで)、待機状態に入ります。
6-3.有効(実行中)
これはジョブが実行中であることを示します。
6-4.完了または中止
ジョブが終了し、そのステータスを示します。「完了」は正常終了を、「中止」は異常終了(エラー)を示します。次の項でこの正常終了、異常終了というジョブの実行結果を確認する方法を説明します。
7.ジョブの実行結果の確認方法について
ジョブの実行結果はトランザクション:SM37で確認します。以下がその画面例になります。
ジョブ名:確認したいジョブ名を入力します。全てのジョブを対象にしたい場合は「*」を入力します。
ユーザ名:ジョブ実行ユーザを指定します。
ジョブステータス:完了したジョブの結果を確認するには「終了」と「完了」にチェックを入れます。また、長時間実行中のジョブなどを調査する場合には「実行中」にチェックを入れます。
条件を指定して実行すると以下のような画面に遷移します。「Status」列が終了の緑色になっていれば正常終了。中止の赤色になっている場合は異常終了(エラー)となります。
実行結果の詳細を確認するには「スプール」列のスプールアイコンをクリックします。
すると以下のような詳細情報が表示されます。異常終了の場合は、この詳細情報から問題調査を行うことになります。※スプールはジョブに登録したプログラム側で実行結果出力定義をしている場合に表示されます。出力設定がなされていない場合はスプールも表示されません。たいていのプログラムは出力されるようになっていますが、出力されないジョブはSAPのシステムログ(トランザクションコード:SM21)やショートダンプ(トランザクションコード:ST22)から問題調査していくことになります。
また、Basisとしてジョブ実行結果を調査する際に、どこのサーバのどのクライアントで実行されたジョブが異常終了したかなど、問題発生個所の特定を行う必要が出てくるケースがあります。その場合、メニューバーにあるキューブアイコンをクリックし、サーバ名とクライアント番号を出すようにすると、以下のように特定が容易になります。ちょっとしたテクニックとして抑えておくと役に立つことがあると思います。
8.おわりに
いかがでしたでしょうか。SAPジョブの仕組みについて、少しでも理解の一助になれば幸いです。Basisの運用としては、ジョブ登録よりもジョブの実行結果、エラーの確認・調査の方が重要なウェイトを占めています。上記をご参考頂き、運用しているSAPシステムで日々どんなジョブがどのサーバのどのクライアントで流れていて、日々どのくらいの時間で終了しているのか、日次・週次・月次でどんなジョブが実行されているのか、確認するところから始めてはいかがでしょうか。正常な状態を把握しておくと、いざジョブが異常終了した際に、問題に気付きやすくなります。次回は、SAPの印刷管理の仕組みについて触れていきたいと思います。