以下に、図面を参照し、本願の開示する処理プログラム、処理装置および処理方法の実施形態について、詳細に説明する。ただし、以下に示す実施形態は、あくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能を含むことができる。そして、各実施形態は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
〔1〕本実施形態におけるバッチ業務の処理方法について
図1〜図26を参照しながら、本実施形態におけるバッチ業務の処理方法について説明する。
上述した通り、オンライン業務の実行時間が長くなりバッチ業務の実行時間帯が短くなり、且つ、想定を超えた突発的なデータ量増加が発生しうる現状では、バッチ業務の実行時間帯内での工夫だけでは、バッチ業務の遅延を抑止することは困難である。そこで、本実施形態の処理方法は、バッチ業務の遅延を抑止してデッドラインの突き抜けを抑止すべく、図1(A)および図1(B)に示すようにバッチ業務の開始時刻以前つまりオンライン業務の時間帯に遡り、効率的にバッチ業務を実行可能にする。
なお、図1(A)は、既存技術によるバッチ業務の処理方法の概要を説明する図であり、図1(B)は、本実施形態におけるバッチ業務の処理方法の概要を説明する図である。また、図1(A)および図1(B)において、日変わり時刻は、業務の開始の時刻(業務の単位の1日の始まり時刻)であり、デッドラインは、バッチ処理が必ず終了しなければならない時刻(オンライン業務の始まり時刻)である。さらに、終了予定時刻は、業務者が遅延監視のために予め設定しておく業務(ジョブネット)の終了を望む時刻である。
図1(A)に示すように、既存技術によるバッチ業務の処理方法では、例えば、デッドライン時刻7:00からオンライン処理終了時刻20:00までの間、オンライン処理が実行される。これにより、一日分、例えば1万件分のオンライン処理結果が得られる。この後、例えば、夜間バッチ開始時刻22:00から一日分(1万件分)のオンライン処理結果に対する一括処理が実行される。
これに対し、図1(B)に示すように、本実施形態におけるバッチ業務の処理方法では、オンライン業務の時間帯に、オンライン処理と並行して、バッチ処理の一部が分割実行される。つまり、図1(B)に示す例では、最初の3千件分のオンライン処理結果に対するバッチ処理がオンライン処理と並行して実行された後、次の4千件分のオンライン処理結果に対するバッチ処理がオンライン処理と並行して実行される。そして、オンライン処理終了後から夜間バッチ開始までの間の時間帯に、最後の3千件分のオンライン処理結果に対するバッチ処理が実行される。
図1(B)に示すような処理を実現するためには、オンライン業務の時間帯において、元々オンライン業務終了後に一括して処理するバッチジョブ(バッチジョブとして登録されたアプリケーション)を動作させることになる。このため、複数のオンライン処理が完了しておらず、一日分の全データ(全てのオンライン処理結果)が出揃っていない状態でアプリケーションを実行することを考慮する必要がある。
〔1−1〕前提条件および技術課題
〔1−1−1〕前提条件
夜間バッチ処理には、大別すると、以下の2種類のジョブ(アプリケーション)A1およびA2が含まれる。なお、以下の説明において、「データ区分」は、「データ群」の一例である。
A1: 一のデータ区分に対して一の処理を実施する一括データ処理(例えば、1件の売上入力に対して1枚の売り上げ伝票を作成する処理)
A2: 1日分(業務として意味のあるまとまった時間の単位)の全てのデータ区分に対して分析や集計などの処理を実施する一括データ処理(例えば、1日分の店舗売上データに対して商品・地域・時間帯・性別・年齢などで売上傾向を分析したり、集計したりする処理)
オンライン業務の時間帯に並行して処理可能なバッチ処理は、上記項目A1に該当するタイプのアプリケーションであり、上記項目A2に該当するタイプのアプリケーションは、オンライン業務の時間帯に並行して実行することはできない。このため、オンライン業務の時間帯に前倒ししてバッチアプリケーションを動作させようとする場合、事前に上記項目A1に該当するタイプのアプリケーションを特定しておく必要がある。
〔1−1−2〕技術課題I(アプリケーションを改修することなく、上記項目A1のタイプを特定するとともに、前倒し可能なジョブ範囲を特定すること)
上記項目A1に該当するタイプのアプリケーションを特定するには、業務者(顧客)の資産であるアプリケーションの内容を分析した上で、アプリケーションの改修を行なうことが考えられる。しかし、数万〜数十万のバッチジョブ(アプリケーション)が登録されているバッチ処理システムにおいて、アプリケーションの多種多様な処理内容を人手で分析した上で、正しく上記項目A1のタイプである旨を特定してメンテナンスするには、多大なコストがかかる。あるいは、現実的にメンテナンスを持続することができない。そのため、アプリケーション側で、前倒し処理に必要な情報を出力させるように改修することは困難であり、必要な情報はアプリケーション側からは得られない。
データ分析を行なって前倒し可能なジョブを抽出する場合、前倒し可能なジョブの範囲を決定する必要がある。その際、ジョブの先行後続関係の流れだけでなく、業務データベース(DB)へのデータ更新,ファイル作成/ファイル転送などを介して後続の処理が待ち合わせを行なう業務(バッチ処理自体)の流れを考慮する必要がある。しかしながら、多種多様なデータのやり取りを行なうバッチ業務全体で、データの流れを一つ一つ追随して前倒し可能なジョブの範囲を特定するのは困難である。
〔1−1−3〕技術課題II(バッチ処理の一部を分割実行してもデータの二重処理や抜けの発生を抑止すること)
オンライン処理の時間帯にバッチ処理の一部を並行して処理することは、これまで夜間に一括で実行していたバッチ処理を、複数回に分割して処理することになる。
上記技術課題Iにおいて、上記項目A1に該当するタイプのアプリケーションが特定され前倒し可能なジョブの範囲(ジョブ群)が特定されても、通常、夜間バッチ処理用に開発されたアプリケーションは、全データ区分が出揃った状態を前提として、一括処理を行なっている。
このため、単純にバッチ処理の一部を前倒しして分割実行した場合、分割実行のタイミングで溜まっている全データを対象にしてバッチ処理が実行される。したがって、図2に示すように、データの二重処理が発生し、結局、オンライン業務終了後の最後のバッチ処理の実行時間は短くならない。
図2は、本実施形態におけるバッチ業務の技術課題を説明する図である。図2に示す例では、時刻7:00〜13:00の間に溜まったデータ区分に対するバッチ処理が時刻13:00に開始された後、時刻7:00〜20:00の間に溜まったデータ区分に対するバッチ処理が時刻20:00に開始されている。つまり、時刻20:00に開始されるバッチ処理では、1回目に処理済みであるデータ区分も含め、当日分の全てのデータ区分が処理対象になってしまう。このため、バッチ処理の一部を日中に前倒しして実行しても、同一バッチ(アプリケーション)を2回以上実行することになる。したがって、データを分割してバッチ処理を短時間で実行することができない。
バッチ処理の実行時間を短くするには、前倒しして実行した処理済のデータを二重処理しないように制御するとともに、最終出力が夜間バッチを1回で実行したときと同じ結果になるように制御する必要がある。しかしながら、該当するアプリケーション(バッチジョブ)は、多種多様な加工処理のタイプが存在し、入出力データに対する処理も様々であり、全てのアプリケーションに対して上述のような制御を行なうことは困難である。
〔1−2〕技術課題の解決手法
本実施形態におけるバッチ業務の処理方法では、所定の複数処理(オンライン処理;第1処理)を完了した後に実行されるバッチ処理(夜間バッチ;第2処理)から、前倒し可能なジョブ群が抽出される。そして、オンライン処理において突発的なデータの増加が予測された場合、抽出されたジョブ群が、所定の複数処理(オンライン処理)と並行して実行される。これにより、オンライン処理済みのデータ区分に対するバッチ処理が前倒されて実行され、デッドラインの突き抜けが抑止される。
図3(A)に示すように、既存技術によるバッチ業務の処理方法では、一日分、例えば1万件分のオンライン処理結果が出揃った後、一日分のデータに対する夜間バッチ処理が一括して実行される。なお、図3(A)は、既存技術によるバッチ業務の処理方法の概要を説明する図である。
これに対し、図3(B)に示すように、本実施形態におけるバッチ業務の処理方法では、オンライン業務の時間帯に、オンライン処理と並行して、バッチ処理の一部が分割実行される。その際、日中バッチの資源が活用される。そして、図3(B)に示す例では、最初の3千件分のオンライン処理結果に対する1回目のバッチ処理がオンライン処理と並行して実行された後、次の4千件分のオンライン処理結果に対する2回目のバッチ処理がオンライン処理と並行して実行される。この後、夜間バッチにおいて、3千件分のオンライン処理結果に対する最終回のバッチ処理が実行される。このように、7千件分のオンライン処理結果に対する夜間バッチ処理が、オンライン処理期間中に前倒しで実行されるため、前倒しして実行したバッチ処理の実行時間分、夜間バッチの実行期間(実行時間)を短縮することができる。なお、図3(B)は、本実施形態におけるバッチ業務の処理方法の概要を説明する図である。
ここで、バッチ処理について簡単に説明する。バッチ処理は、通常、日中バッチと夜間バッチとに分けられ、それぞれ、以下の特性を有している。なお、本実施形態では、日中バッチおよび夜間バッチを含めたバッチ処理のことを「ジョブネット」、バッチジョブを単に「ジョブ」という場合がある。
日中バッチ(オン中バッチまたはオンラインバッチとも呼ぶ)は、オンライン処理中に発生するデータを、逐次、または、ある程度まとまった時点で処理するバッチである。日中バッチは、データ量が少ないため、処理時間は長くない。また、日中バッチは、オンライン処理中に処理されるため、通常、デッドラインは設定されない。
夜間バッチは、オンライン処理によって溜まったデータを、オンライン処理後にまとめて処理するバッチである。夜間バッチは、大量のデータをまとめて処理するため、処理時間が長時間化する。また、夜間バッチでは、オンライン処理後のデータがまとめて処理されるため、次のオンライン処理でデータが蓄積される前までに完了している必要があり、デッドラインが設定される。
個々の夜間バッチは、例えば図4に示す構成を有している。図4は、夜間バッチ処理の構成を示す図である。図4に示すように、夜間バッチは、複数(図4では3つ)のバッチジョブ(アプリケーション)で構成される。最初のバッチジョブには、DBから入力データ(オンライン処理によって得られたデータ区分)が入力され、最初のバッチジョブによる処理結果として一番目の中間出力データが得られる。また、二番目のバッチジョブには、一番目の中間出力データが入力され、二番目のバッチジョブによる処理結果として二番目の中間出力データが得られる。そして、最後のバッチジョブには、二番目の中間出力データが入力され、最後のバッチジョブによる処理結果として最終出力データが得られる。
〔1−2−1〕技術課題Iの解決手法(1)
ここでは、業務者(顧客)の資産であるアプリケーションを改修することなく、1レコード毎に処理されている、上記項目A1に該当するタイプのジョブを抽出する、本実施形態の手法について説明する。
バッチジョブの入力データである、オンライン処理結果のDBおよびバッチジョブの中間出力データに着目し、1レコード(一のデータ区分)ずつ処理されている上記項目A1のタイプのジョブを下記手順iおよびiiによって類推する。
手順i: 各ジョブが、オンライン処理結果のDBを入力としている、データ抽出処理を行なうジョブ(抽出ジョブ)であるか否かを判定する。
手順ii: 抽出ジョブで抽出されたデータ区分を起点に1件ずつ処理が行なわれるジョブであって且つ当該処理によって出力されるデータ区分(中間出力データ)の件数が、抽出されたデータ区分の件数のN倍(Nは1以上の整数)であるジョブを、上記項目A1のタイプのジョブ(前倒し可能なジョブ)であると類推する。また、中間出力データの件数が、入力されるデータ区分の件数の整数倍である後続のジョブについては、まとめて前倒し可能なジョブ群とする。
上記手順iおよびiiの詳細については下記項目〔1−4−1〕の(B1)において説明する。
ここで、抽出ジョブについて説明する。抽出ジョブとは、DBからデータを抽出する処理を実行するジョブで、入力データ(DB)から抽出条件に合致するデータをファイルへ抽出するジョブである。大量データを一括処理する夜間バッチは、図5に示すように、基本的に、抽出ジョブと加工ジョブおよび/または集計ジョブとを組み合わせて構成されている。加工ジョブは、抽出ジョブで入力データから抽出した抽出データに対し、加工を施すジョブである。また、集計ジョブは、同抽出データ、もしくは、加工ジョブで加工されて得られた中間出力データについて集計を行なうジョブである。なお、図5は、抽出ジョブを説明すべく夜間バッチ処理の構成をより詳細に示す図である。
一般的な抽出ジョブの特性としては以下の4つの特性(a1)〜(a4)が挙げられる。そして、アプリケーションからOS(Operating System)に対して発行される処理要求の一部をトラップして当該アプリケーションが抽出ジョブの下記特性(a1)〜(a4)を有するか否かを分析することで、当該アプリケーションが抽出ジョブであるか否かを自動識別することができる。
(a1) 抽出アプリケーションは、入力ファイルを、最初から最後まで、レコード単位、もしくは、ある一定のサイズで順番に読み込む。
(a2) 抽出アプリケーションは、レコードのあるカラムの値が、抽出アプリケーションに指定された抽出条件に一致した場合に、該当するレコードを出力ファイルへ、レコード単位、もしくは、ある一定のサイズで順番に書き込む(レコード加工はなし)。
(a3) 抽出アプリケーションは、1つの出力ファイルに固定されず、抽出条件に従って出力を複数の出力ファイルに振り分ける。複数の出力ファイルが存在する場合、抽出条件と出力ファイルとの関係が、抽出条件定義ファイルに予め定義されている。
(a4) 上記抽出条件定義ファイルは、一回の読込み処理でメモリへ展開される。
〔1−2−2〕技術課題Iの解決手法(2)
ここでは、バッチ業務全体に影響するデータの流れを考慮して、複数の前倒し可能なジョブの範囲(ジョブ群)を特定する、本実施形態の手法について説明する。本実施形態では、下記手順iiiおよびivによって、前倒し可能なジョブ群が特定される。
手順iii: 前倒し可能と判定されたジョブ群に、他の業務(処理)に情報を受け渡す連携処理が含まれるジョブ、すなわち業務DBに対するデータの挿入(insert),更新(update),削除(delete)の処理を含むジョブが含まれる場合、当該ジョブ群を前倒し対象から除外する。手順iiiの詳細については下記項目〔1−4−1〕の(B2)で説明する。
手順iv: 前倒し可能と判定されたジョブ群における、抽出ジョブの後続ジョブに、以下のような所定の出力ジョブ(終端ジョブ)が含まれる場合、抽出ジョブから当該所定の出力ジョブの直前の後続ジョブまでのジョブを前倒し可能なジョブ群の範囲とする。ここで、上記所定の出力ジョブは、最終出力データを、ファイル作成/ファイル転送などを通して後続のバッチ処理に受け渡すジョブ、即ちメッセージ発行処理またはファイル転送処理を行なうジョブである。あるいは、上記所定の出力ジョブは、出力ファイルが他のバッチ処理(他の業務)の起動契機(開始契機)となっているジョブである。手順ivの詳細については下記項目〔1−4−2〕で説明する。
〔1−2−3〕技術課題IIの解決手法
ここでは、分割されたデータを活用することで、バッチ処理を複数回実行しても、入力データを二重に処理することなく最終出力の結果を正しく出力するよう制御を行なう、本実施形態の手法について説明する。本実施形態では、下記手順vおよびviによって上記制御が行なわれる。
手順v: 抽出ジョブ(入力となる抽出データ)を特定し、その単一の入力データの範囲で加工処理を実施しているアプリケーション(加工ジョブ)を前倒し対象として特定することで、上記技術課題IIを解決するための入出力ファイルの制御を可能にする。また、抽出されたジョブ群の実行タイミング(前倒し実行時刻)を、所定の複数処理(オンライン処理)の処理状況に応じて設定・記録しておく。そして、当該実行タイミングまでに処理されたデータの範囲を正しく認識できるように、前倒し実行されたジョブ群の一時入力ファイルおよび一時出力ファイルを、前倒し実行回数に応じて作成する。手順vの詳細については下記項目〔1−8−1〕で説明する。
手順vi: 2回目以降の分割バッチ処理でデータの二重処理が発生しないように、入力ファイルと直前の分割バッチ処理実行時の入力データとを比較し既に処理済みのデータを除外することで得られた未処理データを処理対象にして、前倒し可能なジョブ群を前倒し実行する。実行タイミングが夜間バッチの開始時刻に到達した場合、最終回のバッチ処理として前倒し実行された処理の結果(一時出力ファイル)をマージする。手順viの詳細については下記項目〔1−8−2〕で説明する。
〔1−3〕本実施形態によるバッチ業務の処理方法の概要
本実施形態によるバッチ業務の処理方法は、大きく分けて、下記5つの処理P1〜P5を含む。
処理P1: 業務システムのテスト運用時に、前倒して実行可能な夜間バッチと、前倒し可能な処理(ジョブ)の範囲とを抽出する。
処理P2: 業務システムのテスト運用時に、バッチジョブが利用するDBの単位時間当たりのトランザクション量とジョブの実行時間との相関関係を算出する。
処理P3: 日々の運用(実運用)で各DBに対するトランザクション量の増大を監視し、バッチ処理の前倒し実行が必要か否かを判断する。
処理P4: 実運用時に、日中に前倒しする夜間バッチ処理を選択するとともに、日中における夜間バッチ処理の実行開始時刻を決定する。
処理P5: 前倒して処理されたデータを活用し、バッチ処理を複数回実行してもバッチ処理が正しく実行されるよう制御する。
〔1−4〕処理P1について
処理P1は、事前準備の処理で、上述したように、テスト運用時に、前倒して実行可能な夜間バッチと、前倒し可能な処理(ジョブ)の範囲とを抽出する処理であり、下記項目〔1−4−1〕〜〔1−4−3〕の処理を実行する。
〔1−4−1〕オンライン処理期間への前倒し可能な夜間バッチ処理の抽出
通常、オンライン処理を施されて溜まったデータは、一括して夜間バッチで処理されている。夜間バッチ処理期間から日中のオンライン処理期間に前倒しするには、任意のタイミングまでに溜まったデータ区分ごとに、独立して処理を実行することができる必要がある。
独立して実行可能な処理としては、例えば、オンラインで営業が入力した売上データ1件ごとに対して売上伝票を夜間バッチで作成するような処理が該当する。
また、最終的に分析や集計処理を行なう一連のバッチ処理であっても、対象データの抽出処理、および、データ1件ごとに対して加工を行なう加工処理は、図6に示すように、任意のタイミングまでに溜まったデータ分ごとに独立して処理可能な対象になる。
図6は、独立して分割実行可能な夜間バッチ処理(ジョブ)を説明する図である。独立して実行可能な夜間バッチ処理であれば、夜間に一括して実行されていた夜間バッチを、図6に示すように、例えば3つ(1回目,2回目,最終回)に分割して実行することができる。図6に示す例において、時刻7:00〜18:00にオンライン処理を施されたデータは、時刻18:00からの1回目の夜間バッチで前倒して処理される。また、時刻18:00〜19:00にオンライン処理を施されたデータは、時刻19:00からの2回目の夜間バッチで前倒して処理される。そして、時刻19:00〜20:00にオンライン処理を施されたデータは、時刻22:00からの最終回の夜間バッチで処理される。
本実施形態では、前倒し可能な夜間バッチ処理の抽出を行なうべく下記項目(B1)および(B2)の処理が実行される。
(B1)任意のタイミングまでに溜まったデータ区分ごとに独立して分割実行可能なジョブつまり前倒し可能なジョブの抽出
任意のタイミングまでに溜まったデータ区分ごとに独立して分割実行可能なジョブとは、データを分割して実行できることを意味する。
業務システムにおけるバッチ業務において、このような特徴をもつ処理(ジョブ)は、以下の考え方で判別することができる。つまり、当該処理(ジョブ)においては、抽出ジョブによる抽出処理で抽出されたデータ区分が1つずつ処理されており、その処理による出力データの件数が、抽出されたデータ件数と同じ、または、抽出されたデータ件数のN倍(整数倍)である。このとき、1:Nの関係を評価する起点となる抽出ジョブは、上記項目〔1−2−1〕で説明した手法によって識別される。
なお、全てのデータ(例えば日次処理なら1日分のデータ)が揃っていないと実行できない処理は、例えば分析や集計処理である。これらの処理によって出力されるデータの件数は、入力データ(抽出処理で抽出されたデータ)の件数との間に比例関係はなく、例えば、1000件の入力データに対して、数件の出力結果が得られることになる。
図7に示すような処理を行なうジョブ群は、任意のタイミングまでに溜まったデータ区分ごとに独立して分割実行することができる。図7は、独立して分割実行可能な夜間バッチ処理(ジョブ)を説明する図である。図7に示す例では、抽出ジョブで入力データから抽出された抽出データの件数が100であり、最初の加工ジョブでは、100件の入力データ(抽出データ)に対し100件の中間出力データが得られる。また、2回目の加工ジョブでも、100件の入力データ(中間出力データ)に対し100件の中間出力データが得られる。そして、最終回の加工ジョブ(出力)では、100件の入力データ(中間出力データ)に対し200件の中間出力データが得られる。したがって、図7に示す例では、抽出ジョブと3つの加工ジョブとの全てが、独立して分割実行可能な夜間バッチ処理、つまり前倒し可能な夜間バッチ処理として抽出され特定される。
上述した前倒し可能なジョブ群の特定は、以下の手順(B1−1)〜(B1−6)で行なわれる。なお、抽出ジョブは、上記項目〔1−2−1〕で説明した手法によって識別され、明確化済みであることを前提とする。
(B1−1): 抽出ジョブの入力データファイルが、先行するバッチ処理(ジョブネット)で作成される場合、当該抽出ジョブを含むジョブ群は『前倒し対象外』と判断する。なぜならば、このようなジョブ群は、先行するバッチ処理(ジョブネット)の実行完了後でなければ処理できないため、日中に前倒しすることが不可能であるからである。
(B1−2): 抽出ジョブの出力データ(抽出データ)の件数をカウントし、当該件数を「入力データ件数」として記憶する。
(B1−3): 抽出ジョブの後続ジョブ(通常は加工ジョブや集計ジョブ)が先行ジョブの出力データを入力としており、且つ、当該ジョブの出力データの件数が「入力データ件数」の整数倍と一致するかを判定する。
(B1−4): 上記手順(B1−3)の判定結果が“偽”であれば、当該ジョブ群は『前倒し対象外』と判断し、後述する前倒し可能ジョブ一覧テーブル213における前倒し可能フラグ(図13,図23参照)に“OFF”を設定する。
(B1−5): 上記手順(B1−3)の判定結果が“真”であれば、当該ジョブ群は『前倒し対象』と判断し、前倒し可能ジョブ一覧テーブル213における前倒し可能フラグに“ON”を設定する。
(B1−6): 以降、後続のジョブに対して上記手順(B1−3)の判定処理を後続ジョブがなくなるまで繰り返し実行する。
(B2)他の業務との連携処理が含まれる場合の前倒し対象からの除外
当該ジョブ群の中には、主目的である業務処理以外に、例えば他の業務に何らかの情報や指示を受け渡す「連携処理」が含まれている可能性があり、その連携処理は、通常、業務データが格納されているDB等を介して行なわれる。その様子を図8に示す。図8は連携処理について説明する図である。図8に示す例では、抽出ジョブ(もしくは加工ジョブ)の実行中に、ある条件に合致する売上データを検知した場合に、当該ジョブは、生産管理業務へ生産管理DBを介して必要なデータを受け渡している。そして、生産管理DBにデータが挿入されたことを契機に、生産管理業務として必要なバッチ処理が実行される。このようなバッチ処理は、当日の生産管理データとの突合せを行なう処理であり、夜間に処理されることを前提とするバッチ処理である。
上述のような連携処理が含まれているジョブ群を、日中(オンライン業務時間帯)に前倒しすると、他の業務(図8に示す例では生産管理業務)のバッチ処理が日中に動作することになる。当該バッチ処理(生産管理業務のバッチ処理)は夜間に動作することが前提であるため、当該バッチ処理が日中に動作すると悪影響が発生する。従って、上述のような連携処理が含まれているジョブ群は、前倒し対象から除外する必要がある。
そこで、本実施形態では、上記項目(B1)の処理により「前倒し可能」と判断されたジョブ群に属する全てのジョブについて、DBに対するデータの挿入(insert),更新(update),削除(delete)のいずれかの処理が存在するか否かをチェックする。当該処理が存在する場合、当該ジョブ群は前倒し対象から除外される。
DBに対しデータの挿入(insert),更新(update),削除(delete)の処理を行なうバッチは、ジョブとして実行するアプリケーションの、データの挿入/更新/削除処理をトラップし(図9の処理S1参照)、解析処理(図9の処理S2参照)を行なう。そして、当該解析の結果を確認することで(図9の処理S3参照)、データの挿入/更新/削除処理の存在がチェックされる。なお、トラップ処理は、例えばDBMS(DataBase Management System)の機能によって実現される。また、図9は、DBに対するデータの挿入処理,更新処理,削除処理を含むジョブ(アプリケーション)のチェック手法を説明する図である。
〔1−4−2〕前倒し可能なジョブ範囲の抽出
ついで、前倒し可能なジョブ群の、どの処理(ジョブ)までが前倒し可能であるかの選定、つまり、前倒し可能なジョブ群において実際に前倒し可能なジョブ範囲の抽出が実行される。
ジョブ群における抽出ジョブから終端のジョブまでの全てのジョブが前倒し可能であると判断された場合、終端のジョブは、業務目的となるデータを出力する処理であり、例えば売上伝票データをCSV(Comma Separated Values)形式で出力する。
最終的な出力データを待ち合わせて当日の夜間バッチにおいて後続の処理が実行される場合、出力データを日中に前倒しして作成してしまうと、悪影響が生じる。例えばCSV形式で出力された売上伝票データを待ち合わせ後続の処理で売上伝票データの集計を行なう場合、集計は、夜間バッチで一括処理された結果のデータで実行される必要がある。それにもかかわらず、前倒しで分割処理されたデータを待ち合わせて動作すると、正しい集計を行なうことができない。
このため、本実施形態では、上記のケースに該当する場合、抽出ジョブから、最終的な出力データを作成するジョブの1つ手前(直前)のジョブまでの範囲を、前倒し対象とする。
したがって、バッチ処理を前倒しして実行するパターンとしては、図10(A)および図10(B)にそれぞれ示すような2つのパターン1およびパターン2がある。図10(A)は、前倒し対象ジョブ範囲のパターン1を説明する図、図10(B)は、前倒し対象ジョブ範囲のパターン2を説明する図である。
図10(A)に示すパターン1では、終端のジョブ(出力ジョブ)がデータを後続の処理に受け渡すことがないので、悪影響を生じさせることなく、ジョブ群における抽出ジョブから終端のジョブまでの全てのジョブを前倒して実行することができる。
図10(B)に示すパターン2では、終端のジョブ(出力ジョブ)がデータを後続の処理に受け渡すため、抽出ジョブから、終端のジョブの1つ手前(直前)のジョブまでの範囲を、前倒し対象とする。前倒し可能なジョブ群がパターン2に該当するか否かは、具体的には以下のように判断される。つまり、図11に示すように、出力ジョブの結果によって後続の処理が実行される以下の3つの場合(b1)〜(b3)は、抽出ジョブから出力ジョブの直前のジョブまでの範囲を前倒しの対象にする。なお、図11は、図10(B)に示すパターン2について前倒し可能な処理の範囲を説明する図である。
(b1) 出力ジョブがメッセージ発行処理を行なう。
(b2) 出力ジョブがファイル転送処理を行なう。
(b3) 出力ジョブの出力結果のファイルが、他の業務(次のジョブ)の起動契機/開始契機となっている。
前倒し可能なジョブ群が上記項目(b1)および(b2)に該当するか否かは、業務(ジョブネット)の最終ジョブのジョブ定義を参照することで判断される。一方、前倒し可能なジョブ群が上記項目(b3)に該当するか否かは、当該ジョブ群からデータを受け渡される次の業務(ジョブネット)の最初のジョブのジョブ定義を参照することで判断される。
〔1−4−3〕前倒し可能ジョブ一覧テーブルの作成
本実施形態では、上記項目〔1−4−1〕および〔1−4−2〕の処理に従って、図12に示すようなジョブネットについて、図13に示すような夜間バッチの前倒し可能ジョブ一覧テーブル213が作成される。ここで、図12は、前倒し可能ジョブ一覧テーブル作成対象の夜間バッチ(ジョブネット)の一構成例を示す図である。また、図13は、図12に示す夜間バッチ(ジョブネット)について作成された、本実施形態における前倒し可能ジョブ一覧テーブル213の一例を示す図である。
前倒し実行対象のジョブは、ジョブネットの先頭から前倒し可能フラグが“ON”になっているジョブとする。そして、前倒し実行対象の終端ジョブは、ジョブネット内の一連のジョブのうち、実行順序に従い最初に前倒し可能フラグが“OFF”になっているジョブの直前のジョブとする。また、前倒し可能ジョブ一覧テーブル213では、前倒し可能フラグが“ON”のジョブについて、下記項目〔1−8〕で説明する処理P5を実行する際に必要になる、一時入力ファイル名および一時出力ファイル名が設定される。
図13に示す前倒し可能ジョブ一覧テーブル213の各レコードには、ジョブネット名,ジョブ名,入力ファイル名,出力ファイル名,先行ジョブネット名,先頭フラグ,終端フラグ,抽出ジョブフラグ,入力データ件数,前倒し可能フラグ,一時入力ファイル名,一時出力ファイル名が設定される。図13に示すテーブル213の上側5つのレコードには、例えば図12に示すような、5つのジョブjobA-001〜jobA-005を含む夜間バッチ(ジョブネット)jobnetA1に係る情報が設定されている。図12に示す例では、ジョブjobA-001が抽出ジョブであり、3つのジョブjobA-001〜jobA-003が前倒し可能なジョブ範囲に含まれている。
テーブル213の一番上のレコードには、ジョブjobA-001に係る情報が設定されている。つまり、ジョブネット名の欄には、ジョブjobA-001の属するジョブネット名“jobnetA1”が設定され、ジョブ名の欄には、当該ジョブjobA-001のジョブ名“jobA-001”が設定される。また、入力ファイル名および出力ファイル名の欄には、それぞれ、当該ジョブjobA-001へ入力される入力ファイル名“input001”と当該ジョブjobA-001から出力される出力ファイル名“001_out”とが設定される。また、当該ジョブjobA-001に対する先行ジョブネットは存在しないので、先行ジョブネット名の欄は空欄になっている。また、当該ジョブjobA-001は、先頭ジョブであり、抽出ジョブであり、前倒し可能なジョブであるので、先頭フラグの欄,抽出ジョブフラグの欄および前倒し可能ジョブフラグの欄に“ON”が設定され、終端フラグの欄は空欄となっている。さらに、ジョブjobA-001から次のジョブjobA-002へ入力される入力データ件数の欄には“100”が設定され、一時入力ファイル名および一時出力ファイル名の欄には、それぞれ“input001_copy_n”および“001_out_copy_n”が設定される。なお、一時入力ファイルinput001_copy_nおよび一時出力ファイル001_out_copy_nについては、図24および図26を参照しながら後述する。
なお、図13に示すテーブル213において、図12に示すジョブjobA-002〜jobA-005に係る情報も、上述したジョブjobA-001に係る情報と同様に設定されており、ここでは詳細な説明を省略する。
また、図13に示すテーブ213においては、ジョブネットjobnetB1に係る情報も設定されている。ジョブネットjobnetB1については先行するジョブネットが存在し、ジョブネットjobnetB1の先頭ジョブjobB-001の先行ジョブネット名の欄には、ジョブネット名“jobnetA1”が設定されている。
〔1−5〕処理P2について
処理P2は、事前準備の処理で、上述したように、テスト運用時に、トランザクション量と実行時間との相関テーブルを作成する処理であり、下記項目〔1−5−1〕および〔1−5−2〕の処理を実行する。
〔1−5−1〕夜間バッチがアクセスするDBの調査、および、トランザクション量を記憶するテーブルの作成
前準備として、夜間バッチがアクセスするDBを調査することで、図14および図15に示す2つのテーブル214および215が作成される。なお、図14は、本実施形態におけるデータベースアクセスジョブネット管理情報テーブル214の一例(初期状態)を示す図である。また、図15は、本実施形態におけるデータベーストランザクション情報テーブル215の一例(初期状態)を示す図である。
〔1−5−1−1〕データベースアクセスジョブネット管理情報テーブル
図14に示すように、データベースアクセスジョブネット管理情報テーブル214には、各DBにアクセスするジョブネット(夜間バッチ)に関する情報や、当該ジョブネットに属する各ジョブの実行時間に関する情報が保存される。テーブル214に保存される情報は、下記項目(c1)〜(c7)の通りである。
(c1) デッドライン時刻:オンライン業務の開始時刻であり、夜間に実行されるジョブネットを完了させておかなければならない時刻。図14では例えば時刻7:00が設定されている。
(c2) DB名:ジョブネットがアクセスするDBのDB名。図14では例えばDBMS_A,DBMS_B,DBMS_Cが設定されている。
(c3) ジョブネット名:各DBにアクセスするジョブネットのジョブネット名。なお、一つのジョブネット内で複数のDBへアクセスすることがあるため、同一のジョブネット名が複数のDB名に対応付けられる場合がある。図14では例えばjobnetA1,jobnetB1,jobnetC1等が設定されている。
(c4) 開始時刻:各ジョブネット(夜間バッチ)の開始時刻。
(c5) ジョブ名:ジョブネット内に登録されているジョブのジョブ名。
(c6) 実行時間(通常):各ジョブの実行時間(各ジョブの実行に要する時間)。下記項目〔1−5−2〕で後述するごとくテスト運用時に採取される情報。テーブル214作成直後の初期状態において実行時間(通常)の欄は空欄になっている。
(c7) 実行時間(予測):各ジョブの予測実行時間。下記項目〔1−6−2〕で後述するごとく実運用時に採取されるトランザクション量に基づいて予測される情報。テーブル214作成直後の初期状態において実行時間(予測)の欄は空欄になっている。
〔1−5−1−2〕データベーストランザクション情報テーブル
図15に示すように、データベーストランザクション情報テーブル215には、日中バッチの処理時間帯(時刻6:00〜21:00)における各DBに対する単位時間(ここでは1時間)当たりのトランザクション量に関する情報が保存される。テーブル215に保存される情報は、下記項目(d1)〜(d3)の通りである。
(d1) DB名:ジョブネットがアクセスするDBのDB名。上記データベースアクセスジョブネット管理情報テーブル214に設定されたDB名と同じDB名が設定される。図15では例えばDBMS_A,DBMS_B,DBMS_Cが設定されている。
(d2) トランザクション量(通常):単位時間(例えば1時間)ごとの各DBへのトランザクション量。下記項目〔1−5−2〕で後述するごとくテスト運用時に採取される情報。テーブル215作成直後の初期状態において、トランザクション量(通常)の欄は空欄になっている。
(d3) トランザクション量(実績):単位時間(例えば1時間)ごとの各DBへのトランザクション量。下記項目〔1−6−1〕で後述するごとく実運用時に採取される情報。テーブル215作成直後の初期状態において、トランザクション量(実績)の欄は空欄になっている。
〔1−5−2〕データベースアクセスジョブネット管理情報テーブルおよびデータベーストランザクション情報テーブルへの記録
業務システムのテスト運用において、各ジョブの実行に要する時間が、採取され、図16に示すように、データベースアクセスジョブネット管理情報テーブル214の実行時間(通常)の欄に記録される。また、業務システムのテスト運用において、各DBに対する日中バッチの単位時間当たりのトランザクション量も、採取され、図17に示すように、データベーストランザクション情報テーブル215のトランザクション量(通常)の欄に記録される。
なお、図16は、テスト運用で採取された各ジョブの実行時間(通常)を記録されたデータベースアクセスジョブネット管理情報テーブル214の一例を示す図である。また、図17は、テスト運用で採取された各DBに対するトランザクション量(通常)を記録されたデータベーストランザクション情報テーブル215の一例を示す図である。
〔1−6〕処理P3について
処理P3は、実運用時の処理で、上述したように、日々の運用で各DBに対するトランザクション量の増大を監視し、バッチ処理の前倒し実行が必要か否かを判断する処理であり、下記項目〔1−6−1〕および〔1−6−2〕の処理を実行する。
〔1−6−1〕トランザクション量の監視
業務システムの実運用が開始されると、各DBへの実トランザクション量が単位時間(1時間)ごとに採取される。
採取された実トランザクション量は、図18に示すように、データベーストランザクション情報テーブル215のトランザクション量(実績)の欄に設定される。図18に示すテーブル215では、時刻7:00時点および時刻8:00時点でのデータベースDBMS_A,DBMS_B,DBMS_Cに対する実トランザクション量が、トランザクション量(実績)として記録されている。なお、図18は、実運用で採取された各DBに対するトランザクション量(実績)を記録されたデータベーストランザクション情報テーブル215の一例を示す図である。
〔1−6−2〕前倒し実行の必要性の判断
そして、前倒しが必要か否かの判断が以下のようにして行なわれる。つまり、テーブル215における単位時間当たりの実トランザクション量と、テスト運用時に採取されたテーブル214における各ジョブの実行時間(通常)とに基づき、当日のジョブネットの実行時間が予測される。ここでは、以下の2つの例1および例2について、ジョブネットjobnetA1の実行時間の予測手法を説明する。
〔1−6−2−1〕例1
例1では、突発的なデータ増加がない場合の予測手法、例えば図18の時刻7:00時点でのジョブネットjobnetA1の実行時間を予測する手法について説明する。
ここで、図18に示すように、テスト運用での時刻6:00〜7:00におけるトランザクション量(通常)は100であり、実運用での時刻6:00〜7:00におけるトランザクション量(実績)は80である。また、テスト運用でのジョブネットjobnetA1の実行時間は、4つのジョブjobA-001〜jobA-004の実行時間(通常)の総和つまり00:30(30分)となる。
この場合、テスト運用でのトランザクション量100よりも実運用でのトランザクション量80の方が少ないので、突発的なデータ増加は発生していないと見なされる。データ増加がないと見なされた場合には、図19に示すように、データベースアクセスジョブネット管理情報テーブル214の実行時間(予測)の欄に、テスト運用での実行時間(通常)の時間がそのまま設定される。なお、図19は、実運用時にトランザクション量の増加がない場合の実行時間(予測)を記録されたデータベースアクセスジョブネット管理情報テーブル214の一例を示す図である。
〔1−6−2−2〕例2
例2では、データ増加がある場合、例えば図18の時刻8:00時点でのジョブネットjobnetA1の実行時間を予測する手法について説明する。
ここで、図18に示すように、テスト運用での時刻7:00〜8:00におけるトランザクション量(通常)は120であり、実運用での時刻7:00〜8:00におけるトランザクション量(実績)は200である。また、テスト運用でのジョブネットjobnetA1の実行時間は、4つのジョブjobA-001〜jobA-004の実行時間(通常)の総和つまり00:30(30分)となる。
この場合、テスト運用でのトランザクション量120よりも実運用でのトランザクション量200の方が多いので、データ増加が発生していると見なされる。データ増加があると見なされた場合には、テスト運用時と実運用時とのそれぞれについて今までの単位時間当たりのトランザクション量の総和が算出され、テスト運用時の総和と実運用時の総和とが比較される。
つまり、テスト運用での時刻6:00〜8:00でのトランザクション量の総和は100+120=220であり、実運用での時刻6:00〜8:00でのトランザクション量の総和は80+200=280である。これらの総和を比較すると、テスト運用での総和よりも実運用での総和の方が大きい。この場合、夜間ジョブの実行時間は、下式(1)のごとく、比率計算によって予測される。
[実運用での夜間の各ジョブの予測実行時間]
=[テスト運用での実行時間]×[実運用でのトランザクション量の総和]/[テスト運用でのトランザクション量の総和] (1)
図18に示す例では、上式(1)に基づき、ジョブネットjobnetA1内のジョブjobA-001の予測実行時間が、下式(2)のごとく算出される。
[実運用での夜間ジョブjobA-001の予測実行時間]=5分×280/220
=約7分 (2)
このように算出される各ジョブの予測実行時間は、図20に示すように、データベースアクセスジョブネット管理情報テーブル214の実行時間(予測)の欄に設定される。実行時間(予測)の欄に以前に算出された情報が設定されている場合には、最新の予測実行時間が上書き設定される。なお、図20は、実運用時にトランザクション量の増加がある場合の実行時間(予測)を記録されたデータベースアクセスジョブネット管理情報テーブル214の一例を示す図である。
このようにしてテーブル214に記録された夜間の各ジョブの予測実行時間に基づき、クリティカルパスが算出され、算出されたクリティカルパスがデッドライン時刻に間に合うか否かが評価される。そして、クリティカルパスがデッドライン時刻に間に合わないと評価された場合、つまりクリティカルパスの処理がデッドライン時刻までに完了しないと評価された場合、夜間バッチ処理の日中への前倒しが必要であると判断される。なお、クリティカルパスは、図52を参照しながら後述するクリティカルパス管理情報テーブル216によって管理される。クリティカルパスの評価等については、図42,図43および図52を参照しながら後述する。
〔1−7〕処理P4について
処理P4は、実運用時の処理で、上述したように、日中に前倒しする夜間バッチ処理を選択するとともに、日中における夜間バッチ処理の実行開始時刻を決定する処理であり、下記項目〔1−7−1〕および〔1−7−2〕の処理を実行する。つまり、上述した処理P3によって夜間バッチ処理の日中への前倒しが必要であると判断された場合、下記項目〔1−7−1〕および〔1−7−2〕の処理が実行される。なお、当日の夜間バッチ処理は、前述の予測実行時間に基づいて算出されたクリティカルパスが明確になっていることを前提とする。クリティカルパスは、各ジョブネットの予測実行時間に基づき、一般的な手法によって導出される。
〔1−7−1〕日中に前倒しする夜間バッチ処理の選択
日中に前倒しする夜間バッチ処理の選択は、以下の手順(e1)〜(e7)で行なわれる。
(e1) トランザクション増加から予測された予測実行時間に基づき、導出された夜間バッチのクリティカルパス上に、日中に前倒し可能なバッチ処理(ジョブ群)が存在するか否かをチェックする。
(e2) 前倒し可能なバッチ処理が存在した場合、図21に示すような前倒し候補一覧テーブル217が作成され、予測実行時間の最も長いバッチ処理(前倒し優先度が1のジョブネット)が抽出される。なお、図21は、本実施形態における前倒し候補一覧テーブル217の一例を示す図である。ここで、前倒し候補一覧テーブル217は、以下のようにして作成される。つまり、前倒し可能ジョブ一覧テーブル213中の前倒し可能フラグが“ON”のジョブのうち、クリティカルパス上に存在するジョブが抽出される。そして、抽出された各ジョブの予測実行時間をデータベースアクセスジョブネット管理情報テーブル214から抽出して合計することで、前倒し可能なバッチジョブの予測実行時間の合計が算出され、前倒し候補一覧テーブル217が作成される。その際、予測実行時間が長い順に、前倒し優先度が“1”から昇順に設定される。前倒し候補一覧テーブル217では、ジョブネット名と、前倒し可能なジョブ群に属するジョブのジョブ名と、前記合計および前記前倒し優先度とが対応付けられて保存される。
(e3) 上記手順(e2)で抽出されたバッチ処理を前倒し実行した場合のクリティカルパス全体の実行時間tcが再計算される。つまり、元々のクリティカルパス全体の実行時間toから、上記手順(e2)で抽出されたバッチ処理の実行時間tbを減算した値to−tbが上記実行時間tcとして算出される。そして、当該クリティカルパスの開始時刻Tcに上記実行時間tc(=to−tb)を加算して得られる時刻Tc+tcがデッドライン時刻を超えているか否か、つまり前倒し後のクリティカルパス全体の処理がデッドライン時刻までに完了するか否かがチェックされる。ここで、時刻Tc+tcがデッドライン時刻以前であればクリティカルパス全体の処理はデッドライン時刻までに完了すると判断される一方、時刻Tc+tcがデッドライン時刻を過ぎていればクリティカルパス全体の処理はデッドライン時刻までに完了しないと判断される。
(e4) 上記手順(e3)のチェックの結果、処理がデッドライン時刻までに完了しないと判断された場合、上記手順(e2)の処理に戻り、次の前倒し対象バッチ処理(前倒し優先度が2のジョブネット)が抽出される。そして、抽出された前倒し対象バッチ処理について、上記手順(e3)と同様の処理が行なわれる。上記手順(e2)〜(e4)の処理は、上記手順(e3)でクリティカルパス全体の処理がデッドラインまでに完了すると判断されるまで繰り返し実行される。
(e5) 1つ、または複数のバッチ処理を前倒しすることでデッドライン時刻までに処理が完了すると判断された場合、下記項目〔1−7−2〕の処理が実行される。
(e6) 前倒し実行が決定したジョブ群を管理する、図22に示すような前倒しジョブ群一覧テーブル218が作成される。前倒しジョブ群一覧テーブル218には、前倒しジョブ群に属するジョブのジョブ名が保持される。また、前倒しジョブ群一覧テーブル218には、前倒し実行開始時刻、および、前倒し実行回数(初期状態では0)が保持されて管理される。なお、図22は、本実施形態における前倒しジョブ群一覧テーブル218の一例を示す図である。
(e7) 処理が上記手順(e5)に該当しない場合、つまり、前倒し候補一覧テーブル217に登録された前倒し可能なバッチ処理の全てを前倒し実行したとしてもクリティカルパス全体の処理がデッドライン時刻までに完了しない場合、ジョブ群の前倒しは実行せず、アラームがシステム管理者等に対し通知される。
〔1−7−2〕日中における夜間バッチ処理の実行開始時刻の決定
上記項目〔1−7−1〕の処理によって、日中に前倒しする夜間バッチ処理が選択されると、以下の手順(f1)〜(f4)で、日中における夜間バッチ処理の実行開始時刻が決定される。
なお、本実施形態の手法を実現するためには、以下の点を考慮する必要がある。近年の経営スピードの向上のために、以前から、夜間一括処理していた業務処理を、日中バッチとして日中に実行するケースもある。通常、日中バッチの需要は、夜間バッチと比較して極めて低く、日中バッチが稼働していても、サーバリソースには常時余裕があるのが一般的である。このため、一多重〜数多重のバッチジョブを夜間から日中に前倒しするケースにおいては、特にサーバリソースの逼迫を考慮する必要はない。しかし、夜間バッチを大量に前倒しして日中に実行しようとする場合には、サーバリソースが逼迫する虞があるため、サーバリソースの観点から、前倒しした夜間バッチが日中バッチに影響を与えないように考慮する必要がある。
(f1) トランザクションの増加が検知され前倒し実行が必要と判断された場合、即時に夜間バッチ処理が前倒されて実行される。これが、日中に実行される1回目のバッチ処理となる。このとき、図22に示すように、前倒しジョブ群一覧テーブル218の前倒し実行開始時刻の欄に時刻(例えば12:00)が保存される。
(f2) 上記手順(f1)において、前倒し可能なバッチ処理(ジョブ群)が複数存在する場合、優先順位の高いバッチ処理から順に開始・実行される。
(f3) 上記手順(f2)でバッチ処理を順に開始・実行する際、日中バッチを含め処理多重度の上限チェックが実施され、処理多重度が上限に達していない場合のみ実際にジョブが起動される。処理多重度が上限に達した場合、バッチ処理の実行は保留され、処理多重度の空きが生じると、保留したバッチ処理の実行が開始される。
(f4) 以降、オンライン業務が閉塞するまで1時間ごとに前倒し可能なバッチ処理が実行される。
〔1−8〕処理P5について
処理P5は、実運用時の処理で、上述したように、前倒して処理されたデータを活用し、バッチ処理を複数回実行してもバッチ処理が正しく実行されるよう制御する処理であり、下記項目〔1−8−1〕および〔1−8−2〕の処理を実行する。
〔1−8−1〕一時入力ファイルおよび一時出力ファイルの作成
クリティカルパス上にあるジョブネットを前倒して日中に実行する際、前倒し可能ジョブ一覧テーブル213および前倒し候補一覧テーブル217が参照される。特に、前倒し可能ジョブ一覧テーブル213については、図23に示す要部が参照される。なお、図23は、図13に示す前倒し可能ジョブ一覧テーブル213から、参照すべき要部を抽出して示す図である。
このとき、前倒し可能ジョブ一覧テーブル213のレコードが先頭から順に参照され、前倒し可能フラグが“ON”になっているジョブが始点として抽出される(図23に示す例ではジョブjobA-001が抽出される)。また、同じジョブネット内の一連のジョブのうち、実行順序に従い最初に前倒し可能フラグが“OFF”になるジョブの直前のジョブが終点として抽出される(図23に示す例ではジョブjobA-003が抽出される)。そして、上記始点のジョブから上記終点のジョブまでの一連のジョブ(図23に示す例では3つのジョブjobA-001〜jobA-003)が前倒して実行される。
また、図24に示すように、ジョブネットの入力データは、前倒し可能ジョブ一覧テーブル213に設定された一時入力ファイル名(図23ではinput001_copy_n)を付与されて保存される。また、ジョブ毎の出力ファイルは、前倒し可能ジョブ一覧テーブル213に設定された一時出力ファイル名(図23では001_out_copy_n〜003_out_copy_n)にリネームして保存される。なお、図24は、本実施形態における前倒し処理を説明する図である。
図23および図24における一時入力ファイル名および一時出力ファイル名における“n”は、前倒しジョブ群一覧テーブル218によって保存・管理される前倒し実行回数である。つまり、1回目の前倒し実行時の一時入力ファイルのファイル名はinput001_copy_1であり、1回目の前倒し実行時の一時出力ファイルのファイル名は001_out_copy_1〜003_out_copy_1である。同様に、n回目の前倒し実行時の一時入力ファイルのファイル名はinput001_copy_nであり、n回目の前倒し実行時の一時出力ファイルのファイル名は001_out_copy_n〜003_out_copy_nである。
また、図24では、時刻14:00の時点で1回目の前倒しが実行される例が示されている。このとき、時刻7:00〜14:00のデータinput001が一時入力ファイルinput001_copy_n(n=1)にコピーされて保存される。当該一時入力ファイルinput001_copy_n(n=1)はジョブjobA-001に入力され、ジョブjobA-001から得られた出力ファイル001_outが、一時出力ファイル001_out_copy_n(n=1)にリネームされて保存される。同様にして、一時出力ファイル002_out_copy_n(n=1)および003_out_copy_n(n=1)が保存される。nは、上述した通り、前倒し実行回数に応じた追番(シリアルナンバ)である。
一時入力ファイルおよび一時出力ファイルは、以下の手順(g1)〜(g5)で作成される。
(g1) 前倒し候補一覧テーブル217を参照し、前倒し優先度に基づいて前倒し実行するジョブ群を決定する。
(g2) 前倒し可能ジョブ一覧テーブル213で上記手順(g1)に該当するジョブの情報を参照し、以降の手順(g3)〜(g5)を実施する。
(g3) ジョブネットの入力データ(図24に示す例では入力ファイルinput001)を一時入力ファイル名(図24に示す例ではinput001_copy_n)でコピーして保存する。その際に、本日、何回目の前倒し処理であるかを、前倒しジョブ群一覧テーブル218の前倒し実行回数をカウントアップし、当該前倒し実行回数をファイル名に追番号nとして付加する。
(g4) ジョブネットを前倒し実行する。このとき、前倒し対象のジョブは前倒し実行範囲内のジョブである。
(g5) ジョブが終了するごとに、前倒し可能ジョブ一覧テーブル213に従って、出力ファイル(図24に示す例ではファイル001_out〜003_out)を、一時出力ファイル名(図24に示す例では001_out_copy_n〜003_out_copy_n)にリネームして保存する。この際に上記手順(g3)と同様の追番号nがファイル名に付加されている。
〔1−8−2〕バッチ処理を複数回実行してもバッチ処理が正しく実行されるための制御
本実施形態では、バッチ処理を複数回実行してもバッチ処理が正しく処理されるよう、2回目以降の前倒し実行時には、既に処理された処理済みデータに対する処理は行なわないで、入力データにおける処理済みデータ以外の未処理データが処理対象になるようにしている。
図25は、前倒し処理を1回だけ実行した場合のバッチ処理の例を説明する図である。図25に示す例では、時刻7:00〜14:00の間に溜まったデータは、時刻14:00の時点で1回目の夜間バッチで前倒して処理されている。そして、時刻22:00から実行される2回目(最終回)の夜間バッチでは、入力データのうち、時刻7:00〜14:00の処理済みデータに対する処理は行なわれず、時刻14:00〜20:00の間に溜まった未処理データ(最終未処理データ)に対する処理が行なわれる。
一方、前倒し実行していないジョブ以降の一連のジョブ(例えば図12のジョブjobA-004およびjobA-005参照)の処理対象データは、前倒し実行済データを含めた全データである。このため、処理済データと未処理データとを識別し、必要であれば、各前倒し段階で得られたデータのマージ処理を行なう必要がある。したがって、前倒し実行していないジョブ以降の一連のジョブには、前倒し可能なジョブ群のうちの最終ジョブにおいて、各前倒し段階で得られたデータをマージしたものが、入力データとして入力される(図26の出力ファイル003_outからジョブjobA-004への太点線矢印A参照)。
ここで、前倒し処理を2回以上実行した場合のバッチ処理の例について、図26および以下の手順(h1)〜(h4)を参照しながら説明する。
(h1) n回目(nは2以上の整数)の前倒し実行に際し、まず、以下のようなジョブネット実行前の準備を行なう。つまり、ジョブネットの入力データinput001(オンライン処理によって得られる結果DBの全レコード)を一時入力ファイルinput001_copy_nとしてコピーして保存する。そして、ジョブネットの入力データinput001のうち、前倒し実行で処理済のデータを除外する。具体的には、入力データinput001と、前回の前倒し実行時に保存された一時入力ファイルinput001_copy_(n-1)とを比較し、一致したデータを入力データinput001から削除することで、未処理データが得られジョブネットに入力される。図26では、n回目の前倒し実行時に、時刻19:00〜20:00のデータ(前倒し未処理分)が未処理データ(最終未処理データ)として得られる。
(h2) 上記手順(h1)で得られた未処理データを、入力ファイルinput001として、ジョブネットの先頭ジョブjobA-001に入力し、ジョブネットを実行する。その際、前倒し可能ジョブ一覧テーブル213において前倒し可能フラグが“ON”に設定されているジョブjobA-001〜jobA-003が実行される。ジョブjobA-003の後のジョブjobA-004およびjobA-005による処理は、夜間バッチ(最終回)で実行される。
(h3) 上記手順(h2)で実行した最後のジョブjobA-003の出力データ(図26上側の出力ファイル003_out参照;第2部分出力データ)と前倒し実行時に保存されたn個の一時出力ファイル003_out_copy_1〜003_out_copy_n(第1部分出力データ)とをマージする。そして、マージ結果を、出力ファイル003_out(図26下側参照)として保存する。
(h4) 上記手順(h3)でマージして全データ分となったファイル(図26下側の出力ファイル003_out)を前倒し実行していないジョブ群の先頭ジョブjobA-004に入力し(図26の太点線矢印A参照)、以降のジョブjobA-004およびjobA-005による処理が実行される。
なお、図26に示すように、前倒し可能フラグが“ON”のジョブの各出力データ00x_outは、前倒し実行時に保存した一時出力ファイル00x_out_copy_1〜00x_out_copy_n(部分中間出力データ)とマージされ、それぞれ保存される。図26において、xは1または2である。また、マージ後、copyファイルinput001_copy_1〜input001_copy_nおよび00y_out_copy_1〜00y_out_copy_nは削除される。図26において、yは1,2,3である。
〔2〕本実施形態のジョブ管理サーバ(処理装置)の構成
次に、図27を参照しながら、項目〔1〕で説明した処理方法によってバッチ業務を行なうスケジュール装置1を含む、本実施形態のジョブ管理サーバ(処理装置)100の構成について説明する。なお、図27は、本実施形態におけるジョブ管理サーバ100のハードウエア構成例および機能構成例を示すブロック図である。
図27に示すように、本実施形態のジョブ管理サーバ100は、第1期間(日中のオンライン処理期間)に第1処理(オンライン処理)を実行し第1期間後の第2期間(夜間のバッチ処理期間)に第2処理(バッチ処理)を実行する処理装置である。また、ジョブ管理サーバ100は、PC(Personal Computer)等のコンピュータであり、後述するスケジュール装置1としての機能を果たす。
ジョブ管理サーバ100は、少なくとも、CPU(Central Processing Unit),MPU(Micro-Processing Unit)等の処理部(プロセッサ)10と、RAM(Random Access Memory),HDD(Hard Disk Drive),SSD(Solid State Device)等の記憶部(メモリ)20とを有している。
処理部10は、記憶部20から所定のアプリケーションプログラム(処理プログラム)を読み出して実行することで後述するジョブスケジューラ部11としての機能を果たすほか、ジョブ実行部12としての機能を果たす。なお、前記所定のアプリケーションプログラムは、例えばフレキシブルディスク,CD(CD−ROM,CD−R,CD−RWなど),DVD(DVD−ROM,DVD−RAM,DVD−R,DVD−RW,DVD+R,DVD+RWなど),ブルーレイディスク等のコンピュータ読取可能な記録媒体に記録された形態で提供される。この場合、処理部10は、当該記録媒体からプログラムを読み取って内部記憶装置または外部記憶装置としての記憶部20に転送し格納して用いる。
記憶部20は、前記所定のアプリケーションプログラムを保存するほか、処理部10による処理に必要な各種情報等を保存する。例えば、記憶部20は、前記各種情報等としてジョブ定義情報21を保存する。ジョブ定義情報21には、図28を参照しながら後述する各種情報211〜218が含まれている。
このようなジョブ管理サーバ100(スケジュール装置1)において、ジョブは、ジョブ定義情報21として登録される。
また、ジョブスケジューラ部11は、ジョブの定義,起動条件などを管理するもので、図28を参照しながら後述するシステム情報登録機能,ジョブ登録機能,ジョブ前倒し機能,トランザクション管理機能およびジョブ前倒し実行制御機能を果たす。これらの機能は、前述した通り、処理部10が記憶部20から所定のアプリケーションプログラム(処理プログラム)を読み出して実行することで実現される。
さらに、ジョブ実行部12は、ジョブの起動条件が満たされた場合に、ジョブスケジューラ部11からのジョブ起動依頼に応じてジョブを起動する。なお、ジョブ実行部12としての機能も、処理部10が記憶部20から所定のアプリケーションプログラムを読み出して実行することで実現される。
〔3〕本実施形態のスケジュール装置の構成
次に、図28を参照しながら、上記項目〔1〕で説明した処理方法でバッチ業務を行なうスケジュール装置1の構成について説明する。なお、図28は、本実施形態におけるスケジュール装置1の機能構成例を示すブロック図である。
図28に示すように、本実施形態のスケジュール装置1は、図27を参照しながら上述した通り、ジョブスケジューラ部11,ジョブ実行部12およびジョブ定義情報21(記憶部20)を有している。
ジョブスケジューラ部11は、ジョブ起動依頼部110と、システム情報登録機能を果たすシステム情報登録部111と、ジョブ登録機能を果たすジョブ登録部112とを有する。また、ジョブスケジューラ部11は、ジョブ前倒し機能を果たす前倒しジョブ抽出部113および前倒しジョブ決定部114と、トランザクション管理機能を果たすDBアクセス設定部115およびDBアクセス解析部116とを有する。さらに、ジョブスケジューラ部11は、ジョブ前倒し実行制御機能を果たす入力データ管理部117,ジョブ実行部118および出力データ管理部119を有する。
ジョブ起動依頼部110は、ジョブ実行部118からの指示に従ってジョブ起動依頼を、ジョブ実行部12のジョブ起動部121に対して行ない、当該ジョブ起動部121に所望のジョブを実行させる。
システム情報登録部111は、業務者(顧客),システム管理者等の指示に従って、ジョブ定義情報21に含まれるシステム定義情報211を記憶部20に登録する。システム定義情報211には、図50に示すように、内部管理ファイルの配置先,履歴ファイルのサイズ,仮想時間の利用有無,仮想時間,テスト運用の有無,デッドライン時刻,オンライン/バッチ業務切替時刻などが含まれる。なお、図50は、本実施形態におけるシステム定義情報211の一例を示す図である。
特に、テスト運用の有無,デッドライン時刻およびオンライン/バッチ業務切替時刻は、それぞれ、図30〜図32を参照しながら後述するごとく、業務者(顧客)によって設定される。ここで、テスト運用の有無は、現在の運用がテスト運用であるか本番運用(実運用)であるかを指定する情報である。デッドライン時刻は、前述した通り、オンライン業務の開始時刻で、夜間に実行されるジョブネットを完了させておかなければならない時刻であり(上記項目(c1)参照)、図50に示す例では、時刻7:00が設定されている。オンライン/バッチ業務切替時刻は、業務をオンライン業務からバッチ業務へ切り替える時刻であり、図50に示す例では時刻22:00が設定されている。
ジョブ登録部112は、業務者(顧客),システム管理者等の指示に従って、ジョブ定義情報21に含まれるジョブネット定義情報212を記憶部20に登録する。ジョブネット定義情報212は、ジョブ管理サーバ100(スケジュール装置1)の管理対象であるジョブネットを定義する情報である。ジョブネット定義情報212には、図51に示すように、ジョブネット名と、先行ジョブネット名と、ジョブネットの起動時刻等の起動条件と、当該ジョブネットに属するジョブのジョブ名と、各ジョブのコマンド名と、各ジョブのディレクトリと、ジョブ番号と、先行ジョブ番号とが含まれる。なお、図51は、本実施形態におけるジョブネット定義情報212の一例を示す図である。
ここで、記憶部20のジョブ定義情報21には、上述したシステム定義情報211およびジョブネット定義情報212のほかに、前倒し可能ジョブ一覧テーブル213およびデータベースアクセスジョブネット管理情報テーブル214が含まれる。また、記憶部20のジョブ定義情報21には、データベーストランザクション情報テーブル215,クリティカルパス管理情報テーブル216,前倒し候補一覧テーブル217および前倒しジョブ群一覧テーブル218が含まれる。
前倒し可能ジョブ一覧テーブル213は、例えば図13や図23に示すように、前倒し可能なジョブに関する情報を保持するもので、上記項目〔1−4−3〕で説明したように作成される。
データベースアクセスジョブネット管理情報テーブル214は、例えば図14,図16,図19,図20に示すように、各DBにアクセスするジョブネットに関する情報や、当該ジョブネットに属する各ジョブの実行時間に関する情報を保持する。より具体的に、テーブル214は、上記項目〔1−5−1−1〕で説明したように、上記項目(c1)〜(c7)の情報を保存する。
データベーストランザクション情報テーブル215は、例えば図15,図17,図18に示すように、日中バッチの処理時間帯における各DBに対する単位時間当たりのトランザクション量に関する情報を保持する。より具体的に、テーブル215は、上記項目〔1−5−1−2〕で説明したように、上記項目(d1)〜(d3)の情報を保存する。
クリティカルパス管理情報テーブル216は、上記項目〔1−6−2−2〕で説明したように、テーブル214に記録された夜間の各ジョブの予測実行時間に基づいて算出されるクリティカルパスを管理する。クリティカルパス管理情報テーブル216には、図52に示すように、クリティカルパス上におけるジョブネットのジョブネット名が保持されている。なお、図52は、本実施形態におけるクリティカルパス管理情報テーブル216の一例を示す図である。また、クリティカルパス管理情報テーブル216を用いた処理については、図42および図43を参照しながら後述する。
前倒し候補一覧テーブル217は、上記項目〔1−7−1〕の手順(e2)で説明したように、バッチ処理を予測実行時間の長い順に抽出するために用いられる。前倒し候補一覧テーブル217には、図21に示すように、ジョブネット名と、前倒し可能なジョブ群に属するジョブのジョブ名と、前記合計および前記前倒し優先度とが対応付けられて保存される。
前倒しジョブ群一覧テーブル218は、上記項目〔1−7−1〕の手順(e6)で説明したように、前倒し実行が決定したジョブ群を管理するために用いられる。前倒しジョブ群一覧テーブル218には、図22に示すように、前倒しジョブ群に属するジョブのジョブ名と、前倒し実行開始時刻と、前倒し実行回数(初期状態では0)とが対応付けられて保存される。
前倒しジョブ抽出部113は、テスト運用時に全ジョブを対象にジョブ(アプリケーション)処理を解析し、前倒し可能なジョブを特定して前倒し可能ジョブ一覧テーブル213に記録する。特に、本実施形態の前倒しジョブ抽出部113は、上記項目〔1−4〕で説明した処理P1、つまり、テスト運用時に、前倒して実行可能な夜間バッチと、前倒し可能な処理の範囲とを抽出する処理(上記項目〔1−4−1〕〜〔1−4−3〕の処理参照)を実行する。前倒しジョブ抽出部113のより具体的な動作については、図33〜図37を参照しながら後述する。
前倒しジョブ決定部114は、トランザクション管理機能(後述するDBアクセス解析部116)において当日の夜間バッチの長時間化(遅延)が検知された場合に呼び出されて起動される。そして、前倒しジョブ決定部114は、上記項目〔1−7〕で説明した処理P4、つまり、クリティカルパス上のジョブを対象にして、日中に前倒しする夜間バッチ処理の選択処理(上記項目〔1−7−1〕の処理参照)と日中における夜間バッチ処理の実行開始時刻の決定処理(上記項目〔1−7−2〕の処理参照)とを実行する。前倒しジョブ決定部114のより具体的な動作については、図43〜図45を参照しながら後述する。
DBアクセス設定部115は、テスト運用時では、夜間バッチ処理やオンライン処理のジョブ内にてDBへアクセスしているジョブを特定し、オンライン処理でのジョブがアクセスするDBへのトランザクション量(通常)の情報を取得する処理を実行する。また、DBアクセス設定部115は、夜間バッチでのジョブの実行時間(通常)をデータベースアクセスジョブネット管理情報テーブル214に設定する。さらに、DBアクセス設定部115は、本番運用(実運用)では、オンライン処理でのジョブがアクセスするDBへのトランザクション量(実績)の情報を取得する処理を実行する。特に、本実施形態のDBアクセス設定部115は、上記項目〔1−5〕で説明した処理P2を実行する。つまり、DBアクセス設定部115は、夜間バッチがアクセスするDBの調査、および、トランザクション量を記憶するテーブルの作成を行なう(上記項目〔1−5−1〕の処理参照)。また、DBアクセス設定部115は、データベースアクセスジョブネット管理情報テーブル214およびデータベーストランザクション情報テーブル215への記録を行なう(上記項目〔1−5−2〕の処理参照)。DBアクセス設定部115のより具体的な動作については、図38〜図40を参照しながら後述する。
DBアクセス解析部116は、本番運用(実運用)にて、DBアクセス設定部115によって取得された、DBへアクセスするジョブのトランザクション量を監視する。そして、DBアクセス解析部116は、実運用時のトランザクション量がテスト運用時と比較して多い場合、夜間バッチ処理の実行時間を予測する。また、DBアクセス解析部116は、予測実行時間に基づき夜間バッチ処理がデッドライン時刻までに完了しないと判断した場合、前倒し実行制御機能により、夜間バッチ処理の前倒しを実行させる。特に、本実施形態のDBアクセス解析部116は、トランザクション量の監視処理(上記項目〔1−6−1〕の処理参照)と、前倒し実行の必要性の判断処理(上記項目〔1−6−2〕の処理参照)とを実行する。DBアクセス解析部116のより具体的な動作については、図41および図42を参照しながら後述する。
入力データ管理部117は、前倒しジョブ群を日中に複数回実行すべく、実行対象データ(未処理データ)のみを入力データとして管理し、ジョブに受け渡す処理を行なう。特に、本実施形態の入力データ管理部117は、上記項目〔1−8〕で説明した処理P5を実現するためのものである。入力データ管理部117のより具体的な動作については、図46を参照しながら後述する。
ジョブ実行部118は、前倒し実行するジョブ群の範囲で、ジョブを順次起動制御するもので、所望のジョブを起動させる際には、ジョブ起動依頼部110を介し、ジョブ実行部12のジョブ起動部121に対しジョブ起動依頼を発行する。ジョブ実行部118のより具体的な動作については、図47および図48を参照しながら後述する。
出力データ管理部119は、前倒しジョブ群を日中に複数回実行すべく、前倒し実行ごとに出力されたデータを個別に管理し、夜間バッチの最終実行時に出力データのマージ処理を行なう。特に、本実施形態の出力データ管理部119は、上記項目〔1−8〕で説明した処理P5を実現するためのものである。出力データ管理部119のより具体的な動作については、図49を参照しながら後述する。
上述したシステム情報登録部111,ジョブ登録部112,前倒しジョブ抽出部113,前倒しジョブ決定部114,DBアクセス設定部115,DBアクセス解析部116,入力データ管理部117,ジョブ実行部118および出力データ管理部119としての機能は、前述した通り、処理部10が記憶部20から所定のアプリケーションプログラム(処理プログラム)を読み出して実行することで実現される。
なお、本実施形態の前倒しジョブ抽出部113は、以下の抽出部として機能する。当該抽出部は、オンライン処理から、データ抽出処理を行なう抽出ジョブと、当該抽出ジョブによって抽出されたデータ区分に対する処理を当該データ区分の範囲内で行なう後続ジョブとを含むジョブ群(前倒し可能ジョブ)を抽出する。また、当該抽出部は、前段のジョブから入力された一のデータ区分に対する一以上の処理を行ない一以上の出力データ区分を出力するジョブ(加工ジョブ/出力ジョブ)を、後続ジョブとして抽出する。さらに、当該抽出部は、他の業務との連携処理を行なうジョブがジョブ群に含まれる場合、当該ジョブ群を前倒しの対象から除外する。また、当該抽出部は、下記出力ジョブが後続ジョブに含まれる場合、ジョブ群のうち、抽出ジョブから出力ジョブの直前の後続ジョブまでのジョブを前倒しの対象とする。当該出力ジョブは、メッセージ発行処理を行なう出力ジョブ、または、ファイル転送処理を行なう出力ジョブ、または、出力が他の業務(次のジョブ)の開始契機になっている出力ジョブである。
本実施形態の前倒しジョブ決定部114,DBアクセス解析部116およびジョブ実行部118は、抽出されたジョブ群を、バッチ処理期間(第2期間)からオンライン処理期間(第1期間)に前倒ししてオンライン処理と並行して実行する制御部として機能する。
本実施形態のDBアクセス解析部116は、以下の解析部として機能する。当該解析部は、ジョブ群を前倒ししてオンライン処理と並行して実行する実行タイミングを、オンライン処理の処理状況に応じて設定する。また、当該解析部は、少なくとも、以下の処理(1)〜(4)を実行する。処理(1)は、バッチ処理によって用いられるDBに対するオンライン処理のトランザクション量をオンライン処理の処理状況として監視する。処理(2)は、オンライン処理のトランザクション量に基づいてバッチ処理の予測実行時間を算出する。処理(3)は、バッチ処理の予測実行時間に基づいてバッチ処理が予め設定された完了期限(デッドライン時刻)までに完了するか否かを判断する。処理(4)は、バッチ処理が前記完了期限までに完了しないと判断されたタイミングに応じて、前記実行タイミングを設定する。
本実施形態の入力データ管理部117は、以下の入力データ管理部として機能する。当該入力データ管理部は、前記ジョブ群を前記実行タイミングで実行する場合、前記ジョブ群による処理済みのデータを除いた未処理データを、前記ジョブ群による処理対象として前記ジョブ群に入力する。また、当該入力データ管理部は、オンライン処理期間からバッチ処理期間になった場合、前記ジョブ群による処理済みのデータを除いた最終未処理データを、前記ジョブ群による最終処理対象として前記ジョブ群に入力する。
本実施形態の出力データ管理部119は、以下の出力データ管理部として機能する。当該出力データ管理部は、前記実行タイミング毎に未処理データについて前記ジョブ群によって得られた第1部分出力データと、前記最終未処理データについて前記ジョブ群によって得られた第2部分出力データとを出力データとしてマージする。また、当該出力データ管理部は、オンライン処理期間からバッチ処理期間になった場合、前記実行タイミング毎に前記ジョブ群に属する各ジョブによって得られた部分中間出力データを、各ジョブ毎に中間出力データとしてマージして出力する。
本実施形態のジョブ実行部118,12は、以下のジョブ実行部として機能する。当該ジョブ実行部は、マージされた出力データに対し、バッチ処理における前記ジョブ群以降のジョブを実行する。
〔4〕本実施形態のスケジュール装置の動作
次に、図29〜図49を参照しながら、本実施形態に係るスケジュール装置1の動作について説明する。
〔4−1〕ジョブ実行時の動作概要
まず、図29に示すフローチャート(ステップS101〜S111)に従って、本実施形態のスケジュール装置1によるジョブ実行時の動作概要について説明する。
スケジュール装置1は、今回の運用がテスト運用であるか否かを判断し(ステップS101)、テスト運用である場合(ステップS101のYESルート)、ジョブ起動依頼部110を介しジョブ実行部12に対しジョブ起動依頼を行なう(ステップS102)。そして、スケジュール装置1は、ジョブ前倒し機能の前倒しジョブ抽出部113を起動し(ステップS103)、図33〜図37を参照しながら後述する処理を前倒しジョブ抽出部113に実行させる。この後、スケジュール装置1は、トランザクション管理機能のDBアクセス設定部115を起動し(ステップS104)、図38〜図40を参照しながら後述する処理をDBアクセス設定部115に実行させてから、処理を終了する。
一方、テスト運用でない場合、つまり本番運用(実運用)である場合(ステップS101のNOルート)、スケジュール装置1は、トランザクション管理機能のDBアクセス設定部115を起動し(ステップS105)、図39および図40を参照しながら後述する処理をDBアクセス設定部115に実行させる。また、スケジュール装置1は、トランザクション管理機能のDBアクセス解析部116を起動し(ステップS106)、図41および図42を参照しながら後述する処理をDBアクセス解析部116に実行させる。さらに、スケジュール装置1は、ジョブ前倒し機能の前倒しジョブ決定部114を起動し(ステップS107)、図43〜図45を参照しながら後述する処理を前倒しジョブ決定部114に実行させる。そして、ジョブ起動依頼部110を介しジョブ実行部12に対しジョブ起動依頼を行なう(ステップS108)。
この後、スケジュール装置1は、ジョブ前倒し実行制御機能の入力データ管理部117を起動し(ステップS109)、図46を参照しながら後述する処理を入力データ管理部117に実行させる。また、スケジュール装置1は、ジョブ前倒し実行制御機能のジョブ実行部118を起動し(ステップS110)、図47および図48を参照しながら後述する処理をジョブ実行部118に実行させる。
上述したステップS107〜S110の処理は、オンライン業務が閉塞するまで繰り返し実行される。オンライン業務が閉塞されると、スケジュール装置1は、ジョブ前倒し実行制御機能の出力データ管理部119を起動し(ステップS111)、図49を参照しながら後述する処理を出力データ管理部119に実行させてから、処理を終了する。
〔4−2〕スケジュール装置に対する設定動作
次に、図30〜図32に示すフローチャート(ステップS121〜S123)に従って、本実施形態のスケジュール装置1におけるテスト運用設定動作,デッドライン時刻設定動作,オンライン/バッチ業務切換時刻設定動作について説明する。
スケジュール装置1が処理を開始するのに先立ち、システム情報登録部111は、図30に示すように、ジョブ定義情報21のシステム定義情報211に、業務者(顧客)等の指示に従って、テスト運用の有無を設定する(ステップS121)。このとき、業務者(顧客)からの「テスト運用」の入力値(テスト運用/本番運用)が、システム定義情報211の「テスト運用の有無」の欄(図50参照)に設定される。通常、業務システムの実運用開始前には「テスト運用」が設定されて事前準備が行なわれた後、「本番運用」が設定されて実運用が開始される。
また、スケジュール装置1が処理を開始するのに先立ち、システム情報登録部111は、図31に示すように、ジョブ定義情報21のシステム定義情報211に、業務者(顧客)等の指示に従って、デッドライン時刻を設定する(ステップS122)。このとき、業務者(顧客)からの「デッドライン時刻」の入力値(例えば時刻7:00)が、システム定義情報211の「デッドライン時刻」の欄(図50参照)に設定される。
さらに、スケジュール装置1が処理を開始するのに先立ち、システム情報登録部111は、図32に示すように、ジョブ定義情報21のシステム定義情報211に、業務者(顧客)等の指示に従って、オンライン/バッチ業務切替時刻を設定する(ステップS123)。このとき、業務者(顧客)からの「オンライン/バッチ業務切替時刻」の入力値(例えば時刻22:00)が、システム定義情報211の「オンライン/バッチ業務切替時刻」の欄(図50参照)に設定される。
〔4−3〕前倒しジョブ抽出部の動作
次に、図33〜図37に示すフローチャートに従って、本実施形態のスケジュール装置1における前倒しジョブ抽出部113の動作について説明する。
〔4−3−1〕抽出ジョブの前倒し可能フラグのON/OFF設定
図33に示すフローチャート(ステップS201〜S211)に従って、前倒しジョブ抽出部113による抽出ジョブについての前倒し可能フラグのON/OFF設定動作、つまり抽出ジョブが前倒し可能か否かの判定動作について説明する。なお、図33の処理を開始する時点では、図13に示す前倒し可能ジョブ一覧テーブル213において、入力データ件数,前倒し可能フラグ,一時入力ファイル名および一時出力ファイル名の欄は空欄であり、それ以外の欄には各種情報が設定されている。
前倒しジョブ抽出部113は、まず、前倒し可能ジョブ一覧テーブル213のレコードを、先頭から順に一つずつ読み込む(ステップS201)。そして、前倒しジョブ抽出部113は、読み込んだレコードに対応するジョブが抽出ジョブであるか否か、つまり抽出ジョブフラグが“ON”か“OFF”かを判断する(ステップS202)。
対応ジョブが抽出ジョブでない場合つまり抽出ジョブフラグが“OFF”である場合(ステップS202のNOルート)、前倒しジョブ抽出部113は、読み込んだレコードが最終レコードか否かを判断する(ステップS211)。最終レコードである場合(ステップS211のYESルート)、前倒しジョブ抽出部113は処理を終了する一方、最終レコードでない場合(ステップS211のNOルート)、前倒しジョブ抽出部113はステップS201の処理に戻る。
対応ジョブが抽出ジョブである場合つまり抽出ジョブフラグが“ON”である場合(ステップS202のYESルート)、前倒しジョブ抽出部113は、当該レコードの先行ジョブネット名の欄を参照し、当該抽出ジョブにファイルを入力する先行ジョブネットがあるか否かを判断する(ステップS203)。先行ジョブネットがある場合(ステップS203のYESルート)、前倒しジョブ抽出部113は、先行ジョブネットの出力ファイルと当該抽出ジョブの入力ファイルとが一致するか否かを判断する(ステップS204)。
先行ジョブネットの出力ファイルと当該抽出ジョブの入力ファイルとが一致する場合(ステップS204のYESルート)は、上記項目〔1−4−1〕の手順(B1−1)で説明した状況に該当する。そのため、前倒しジョブ抽出部113は、当該抽出ジョブの前倒し可能フラグを“OFF”に設定し(ステップS209)、当該抽出ジョブが属しているジョブネット内のジョブを、前倒し可能ジョブ一覧テーブル213から削除する(ステップS210)。この後、前倒しジョブ抽出部113は、ステップS211の処理へ移行する。
先行ジョブネットがない場合(ステップS203のNOルート)、または、先行ジョブネットの出力ファイルと当該抽出ジョブの入力ファイルとが一致しない場合(ステップS204のNOルート)、前倒しジョブ抽出部113は以下の判断を行なう(ステップS205)。つまり、前倒しジョブ抽出部113は、当該抽出ジョブの出力ファイルと後続ジョブの入力ファイルとが同じか否かを判断する(手順(B1−3)参照)。
当該抽出ジョブの出力ファイルと後続ジョブの入力ファイルとが同じ場合(ステップS205のYESルート)、前倒しジョブ抽出部113は、抽出ジョブの出力データの件数をカウントし、カウントした件数を、当該レコードの入力データ件数の欄に記録する(ステップS206;手順(B1−2)参照)。この後、前倒しジョブ抽出部113は、後続ジョブの出力データ件数が、入力データ件数の欄に記録した入力データ件数の整数倍であるか否かを判断する(ステップS207;手順(B1−3)参照)。
後続ジョブの出力データ件数が入力データ件数の欄に記録した入力データ件数の整数倍である場合(ステップS207のYESルート)、前倒しジョブ抽出部113は、当該抽出ジョブは『前倒し対象』と判断し、当該抽出ジョブの前倒し可能フラグを“ON”に設定する(ステップS208;上記手順(B1−5)参照)。この後、前倒しジョブ抽出部113は、ステップS211の処理へ移行する。
当該抽出ジョブの出力ファイルと後続ジョブの入力ファイルとが異なる場合(ステップS205のNOルート)、または、後続ジョブの出力データ件数が入力データ件数の欄に記録した入力データ件数の整数倍でない場合(ステップS207のNOルート)、前倒しジョブ抽出部113は以下の処理を行なう。つまり、前倒しジョブ抽出部113は、当該抽出ジョブは『前倒し対象外』と判断し、ステップS209の処理へ移行する(上記手順(B1−4)参照)。
〔4−3−2〕抽出ジョブ以外のジョブの前倒し可能フラグのON/OFF設定
図34に示すフローチャート(ステップS221〜S232)に従って、前倒しジョブ抽出部113による抽出ジョブ以外のジョブについての前倒し可能フラグのON/OFF設定動作、つまり抽出ジョブ以外のジョブが前倒し可能か否かの判定動作について説明する。なお、図34に示す処理は図33に示す処理の後に実行されるものとする。
前倒しジョブ抽出部113は、まず、前倒し可能ジョブ一覧テーブル213のレコードを、先頭から順に一つずつ読み込む(ステップS221)。そして、前倒しジョブ抽出部113は、読み込んだレコードに対応するジョブが抽出ジョブであるか否か、つまり抽出ジョブフラグが“ON”か“OFF”かを判断する(ステップS222)。
対応ジョブが抽出ジョブでない場合つまり抽出ジョブフラグが“OFF”である場合(ステップS222のNOルート)、前倒しジョブ抽出部113は、ステップS221の処理に戻る。対応ジョブが抽出ジョブである場合つまり抽出ジョブフラグが“ON”である場合(ステップS222のYESルート)、前倒しジョブ抽出部113は、当該ジョブにファイルを入力する先行ジョブがあるか否かを判断する(ステップS223)。
先行ジョブがある場合(ステップS223のYESルート)、前倒しジョブ抽出部113は、当該抽出ジョブの先行ジョブの前倒し可能フラグに“ON”を記録する(ステップS224)。このように前倒し可能フラグに“ON”を記録した後、もしくは、先行ジョブがない場合(ステップS223のNOルート)、前倒しジョブ抽出部113は、当該抽出ジョブに後続するジョブについてのレコードを、前倒し可能ジョブ一覧テーブル213から読み込む(ステップS225)。そして、前倒しジョブ抽出部113は、当該ジョブが抽出ジョブであるか否か、つまり当該ジョブの抽出ジョブフラグが“ON”か“OFF”かを判断する(ステップS226)。ステップS226では、次のジョブネットにおける抽出ジョブの検知が行なわれている。
当該ジョブが抽出ジョブである場合つまり抽出ジョブフラグが“ON”である場合(ステップS226のYESルート)、前倒しジョブ抽出部113は、ステップS223の処理に戻る。一方、当該ジョブが抽出ジョブでない場合つまり抽出ジョブフラグが“OFF”である場合(ステップS226のNOルート)、前倒しジョブ抽出部113は以下の判断を行なう(ステップS227)。つまり、前倒しジョブ抽出部113は、先行ジョブの出力ファイルと当該ジョブの入力ファイルとが同じか否かを判断する(手順(B1−3)参照)。
先行ジョブの出力ファイルと当該ジョブの入力ファイルとが同じ場合(ステップS227のYESルート)、前倒しジョブ抽出部113は、当該ジョブの出力データの件数をカウントし、カウントした件数を、当該ジョブの入力データ件数の欄に記録する(ステップS228;手順(B1−2)参照)。この後、前倒しジョブ抽出部113は、当該ジョブの出力データ件数が、先行ジョブの入力データ件数の整数倍であるか否かを判断する(ステップS229;手順(B1−3)参照)。
当該ジョブの出力データ件数が先行ジョブの入力データ件数の整数倍である場合(ステップS229のYESルート)、前倒しジョブ抽出部113は、当該ジョブは『前倒し対象』と判断し、当該ジョブの前倒し可能フラグを“ON”に設定する(ステップS230;上記手順(B1−5)参照)。この後、前倒しジョブ抽出部113は、読み込んだレコードが最終レコードか否かを判断する(ステップS232)。最終レコードである場合(ステップS232のYESルート)、前倒しジョブ抽出部113は処理を終了する一方、最終レコードでない場合(ステップS232のNOルート)、前倒しジョブ抽出部113はステップS225の処理に戻る。
先行ジョブの出力ファイルと当該ジョブの入力ファイルとが異なる場合(ステップS227のNOルート)、または、当該ジョブの出力データ件数が先行ジョブの入力データ件数の整数倍でない場合(ステップS229のNOルート)、前倒しジョブ抽出部113は以下の処理を行なう。つまり、前倒しジョブ抽出部113は、当該ジョブは『前倒し対象外』と判断し、当該抽出ジョブの前倒し可能フラグを“OFF”に設定する(ステップS231;上記手順(B1−4)参照)。この後、前倒しジョブ抽出部113は、ステップS232の処理へ移行する。
〔4−3−3〕連携処理を含むジョブの除外
図35に示すフローチャート(ステップS241,S242)に従って、前倒しジョブ抽出部113による、連携処理を含むジョブを前倒し対象から除外する動作について説明する。
前倒しジョブ抽出部113は、図33および図34に示す処理によってジョブの前倒し可能フラグのON/OFF設定を行なった後、前倒し可能と判断されたジョブ群に属する全てのジョブについて、他の業務との連携処理が存在するか否かをチェックする。つまり、前倒しジョブ抽出部113は、前倒し可能ジョブ一覧テーブル213において前倒し可能フラグが“ON”のジョブに、業務用RDBMS(Relational DataBase Management System)に対するデータの挿入,更新,削除のいずれかの処理が存在するか否かをチェックする(ステップS241)。
当該処理が存在する場合(ステップS241のYESルート)、前倒しジョブ抽出部113は、該当するジョブが属しているジョブネット(ジョブ群)を、前倒し可能ジョブ一覧テーブル213から削除する(ステップS242)。一方、当該処理が存在しない場合(ステップS241のNOルート)、前倒しジョブ抽出部113は、連携処理を含むジョブの除外動作を終了する。
〔4−3−4〕前倒し可能なジョブ範囲の抽出
図36に示すフローチャート(ステップS251〜S257)に従って、前倒しジョブ抽出部113による、前倒し可能なジョブ範囲の抽出動作について説明する。前倒しジョブ抽出部113は、図35に示す処理によって連携処理を含むジョブを前倒し対象から除外した後、前倒し可能なジョブ範囲の抽出を行なう。つまり、前倒しジョブ抽出部113は、前倒し可能なジョブ群において実際に前倒し可能なジョブ範囲を抽出する。
前倒しジョブ抽出部113は、前倒し可能ジョブ一覧テーブル213のレコードを、先頭から順に一つずつ読み込む(ステップS251)。そして、前倒しジョブ抽出部113は、読み込んだレコードに対応するジョブが終端のジョブであるか否か、つまり終端フラグが“ON”か否かを判断する(ステップS252)。
対応ジョブ(当該ジョブ)が終端ジョブでない場合つまり終端フラグが“ON”でない場合(ステップS252のNOルート)、前倒しジョブ抽出部113は、読み込んだレコードが最終レコードか否かを判断する(ステップS257)。最終レコードである場合(ステップS257のYESルート)、前倒しジョブ抽出部113は処理を終了する一方、最終レコードでない場合(ステップS257のNOルート)、前倒しジョブ抽出部113はステップS251の処理に戻る。
該当ジョブが終端ジョブである場合つまり終端フラグが“ON”である場合(ステップS252のYESルート)、前倒しジョブ抽出部113は、ジョブネット定義情報212(図51参照)を参照し、当該ジョブがメッセージ発行処理を実施しているか否かを判断する(ステップS253)。当該ジョブがメッセージ発行処理を実施している場合(ステップS253のYESルート)、前倒しジョブ抽出部113は、該当ジョブの前倒し可能フラグを“OFF”に設定してから(ステップS256)、ステップS257の処理へ移行する。
当該ジョブがメッセージ発行処理を実施していない場合(ステップS253のNOルート)、前倒しジョブ抽出部113は、ジョブネット定義情報212を参照し、当該ジョブがファイル転送処理を実施しているか否かを判断する(ステップS254)。当該ジョブがファイル転送処理を実施している場合(ステップS254のYESルート)、前倒しジョブ抽出部113は、該当ジョブの前倒し可能フラグを“OFF”に設定してから(ステップS256)、ステップS257の処理へ移行する。
当該ジョブがファイル転送処理を実施していない場合(ステップS254のNOルート)、前倒しジョブ抽出部113は、ジョブネット定義情報212を参照し、当該ジョブの出力ファイルが他のジョブネットの起動契機になっているか否かを判断する(ステップS255)。当該ジョブの出力ファイルが他のジョブネットの起動契機になっている場合(ステップS255のYESルート)、前倒しジョブ抽出部113は、該当ジョブの前倒し可能フラグを“OFF”に設定してから(ステップS256)、ステップS257の処理へ移行する。一方、当該ジョブの出力ファイルが他のジョブネットの起動契機になっていない場合(ステップS255のNOルート)、前倒しジョブ抽出部113は、ステップS257の処理へ移行する。
以上のようにして、前倒しジョブ抽出部113によって、前倒し可能なジョブ群の、どの処理(ジョブ)までが前倒し可能であるかの選定、つまり、前倒し可能なジョブ群において実際に前倒し可能なジョブ範囲の抽出が実行される。
〔4−3−5〕一時入力ファイル名および一時出力ファイル名の設定
図37に示すフローチャート(ステップS261〜S266)に従って、前倒しジョブ抽出部113による、一時入力ファイル名および一時出力ファイル名の設定動作について説明する。
前倒しジョブ抽出部113は、図33〜図36に示す処理を行なった後、前倒し可能ジョブ一覧テーブル213のレコードを、先頭から順に一つずつ読み込む(ステップS261)。そして、前倒しジョブ抽出部113は、読み込んだレコードにおける前倒し可能フラグが“ON”であるか否かを判断する(ステップS262)。
前倒し可能フラグが“OFF”である場合(ステップS262のNOルート)、前倒しジョブ抽出部113は、読み込んだレコードが最終レコードか否かを判断する(ステップS266)。最終レコードである場合(ステップS266のYESルート)、前倒しジョブ抽出部113は処理を終了する一方、最終レコードでない場合(ステップS266のNOルート)、前倒しジョブ抽出部113はステップS261の処理に戻る。
前倒し可能フラグが“ON”である場合(ステップS262のYESルート)、前倒しジョブ抽出部113は、読み込んだレコードにおける抽出ジョブフラグが“ON”であるか否かを判断する(ステップS263)。抽出ジョブフラグが“ON”である場合(ステップS263のYESルート)、前倒しジョブ抽出部113は、当該レコードの入力ファイル名を参照し、一時入力ファイル名の欄に「入力ファイル名_copy_n」を設定する(ステップS264)。例えば図13に示す前倒し可能ジョブ一覧テーブル213における、ジョブjobA-001のレコードでは、入力ファイル名として“input001”が設定され、一時入力ファイル名として“input001_copy_n”が設定される。
一時入力ファイル名の設定を行なった後、または、抽出ジョブフラグが“OFF”である場合(ステップS263のNOルート)、前倒しジョブ抽出部113は、当該レコードの出力ファイル名を参照し、一時出力ファイル名の欄に「出力ファイル名_copy_n」を設定する(ステップS265)。例えば図13に示す前倒し可能ジョブ一覧テーブル213における、ジョブjobA-001のレコードでは、出力ファイル名として“001_out”が設定され、一時出力ファイル名として“001_out_copy_n”が設定される。この後、前倒しジョブ抽出部113は、ステップS266の処理へ移行する。
〔4−4〕データベースアクセス設定部の動作
次に、図38〜図40に示すフローチャートに従って、本実施形態のスケジュール装置1におけるデータベースアクセス設定部115の動作について説明する。
〔4−4−1〕夜間バッチがアクセスするDBの調査、および、トランザクション量を記憶するテーブルの作成(上記項目〔1−5−1〕の処理参照)
図38に示すフローチャート(ステップS301〜S307)に従って、DBアクセス設定部115による、夜間バッチがアクセスするDBの調査動作、および、トランザクション量を記憶するテーブルの作成動作について説明する。
DBアクセス設定部115は、前倒し可能ジョブ一覧テーブル213のジョブのうち、DBにアクセスするジョブについて、ステップS302〜S304の処理をループさせる(ステップS301)。DBアクセス設定部115は、DBへの接続(CONNECT)ライブラリの置き換えを行ない(ステップS302)、ジョブの実行時に、DBへの接続(CONNECT)ライブラリにより接続先DBの解析を行なう(ステップS303)。そして、DBアクセス設定部115は、解析結果に基づき、データベースアクセスジョブネット管理情報テーブル214に、DB名,ジョブネット名,各ジョブネットの開始時刻,ジョブ名を設定する(ステップS304;図14参照)。
DBアクセス設定部115は、全てのジョブを検索するまで、ステップS301〜S304の処理を繰り返し実行し、全てのジョブの検索を終了すると(ステップS305)、以下の処理を行なう。つまり、DBアクセス設定部115は、データベーストランザクション情報テーブル215に、データベースアクセスジョブネット管理情報テーブル214のDB名を設定する(ステップS306;図15参照)。この後、DBアクセス設定部115は、DBへの接続(CONNECT)ライブラリの復元を行なってから(ステップS307)、処理を終了する。
〔4−4−2〕データベースアクセスジョブネット管理情報テーブルへの記録(上記項目〔1−5−2〕の処理参照)
図39に示すフローチャート(ステップS311〜S315)に従って、DBアクセス設定部115による、データベースアクセスジョブネット管理情報テーブル214への設定(記録)動作について説明する。
DBアクセス設定部115は、ジョブの実行前の時刻を採取してから(ステップS311)、ジョブ実行部12にジョブを実行させる(ステップS312)。そして、DBアクセス設定部115は、ジョブの実行後の時刻を採取し、実行前時刻と実行後時刻との差分により、ジョブの実行時間を算出する(ステップS313)。
この後、DBアクセス設定部115は、現在の運用がテスト運用か否かを判断する(ステップS314)。現在の運用がテスト運用である場合(ステップS314のYESルート)、データベースアクセスジョブネット管理情報テーブル214における、当該実行ジョブに対応する実行時間(通常)の欄に、算出された実行時間を設定してから(ステップS315;図16参照)、処理を終了する。一方、現在の運用がテスト運用でない場合つまり本番運用である場合(ステップS314のNOルート)、DBアクセス設定部115は処理を終了する。
〔4−4−3〕データベーストランザクション情報テーブルへの記録(上記項目〔1−5−2〕の処理参照)
図40に示すフローチャート(ステップS321〜S328)に従って、DBアクセス設定部115による、データベーストランザクション情報テーブル215への設定(記録)動作について説明する。
DBアクセス設定部115は、DBへの接続(CONNECT)ライブラリおよび確定(COMMIT)ライブラリの置き換えを行ない(ステップS321)、ジョブ実行部12にジョブを実行させる(ステップS322)。そして、ジョブの実行に伴う、DBへの確定(COMMIT)回数をカウントする(ステップS323)。
この後、DBアクセス設定部115は、カウントされたDBへの確定(COMMIT)回数が0よりも大きいか否かを判断する(ステップS324)。確定(COMMIT)回数が0である場合つまりDBへのアクセスが行なわれていない場合(ステップS324のNOルート)、DBアクセス設定部115は、DBへの接続(CONNECT)ライブラリおよび確定(COMMIT)ライブラリの復元を行なってから(ステップS328)、処理を終了する。
確定(COMMIT)回数が0よりも大きい場合つまりDBへのアクセスが行なわれている場合(ステップS324のYESルート)、DBアクセス設定部115は、現在の運用がテスト運用か否かを判断する(ステップS325)。現在の運用がテスト運用である場合(ステップS325のYESルート)、DBアクセス設定部115は、データベーストランザクション情報テーブル215のトランザクション量(通常)の欄に、確定(COMMIT)回数に基づく単位時間当たりのトランザクション量を設定する(ステップS326;図17参照)。そして、DBアクセス設定部115は、ステップS328の処理へ移行する。
一方、現在の運用がテスト運用でない場合つまり本番運用である場合(ステップS325のNOルート)、DBアクセス設定部115は、データベーストランザクション情報テーブル215のトランザクション量(実績)の欄に、確定(COMMIT)回数に基づく単位時間当たりのトランザクション量を設定する(ステップS327;図18参照)。そして、DBアクセス設定部115は、ステップS328の処理へ移行する。
〔4−5〕データベースアクセス解析部の動作
次に、図41および図42に示すフローチャートに従って、本実施形態のスケジュール装置1におけるデータベースアクセス解析部116の動作について説明する。
DBアクセス解析部116は、業務システムの本番運用でオンライン業務が開始されるのに伴い、トランザクション量の監視を開始すると、例えば1時間ごとに図42に示す処理(トランザクション量の監視および前倒し実行の必要性の判断)を行なう。つまり、図41に示すように、DBアクセス解析部116は、1時間のスリープ処理(ステップS401)と、図42に示す処理の実行(ステップS402)とを繰り返すことで、1時間ごとに図42に示す処理を実行する。DBアクセス解析部116は、オンライン処理終了時刻になると、トランザクション量の監視を終了する。
図42に示すフローチャート(ステップS411〜S417)に従って、DBアクセス解析部116による、トランザクション量の監視動作(上記項目〔1−6−1〕の処理参照)および前倒し実行の必要性の判断動作(上記項目〔1−6−2〕の処理参照)について説明する。
DBアクセス解析部116は、本番運用に伴い図40のステップS327(DBアクセス設定部115)によって得られるトランザクション量(実績)に基づき1時間ごとにトランザクション量(実績)を監視する(ステップS411)。そして、DBアクセス解析部116は、1時間ごとに、トランザクション量(実績)に基づいてステップS412〜S417の処理を実行する。
つまり、DBアクセス解析部116は、データベーストランザクション情報テーブル215において、対象ジョブの属するジョブネットのトランザクション量(実績)がトランザクション量(通常)よりも多いか否かを判断する(ステップS412)。
トランザクション量(実績)がトランザクション量(通常)以下である場合(ステップS412のNOルート)、DBアクセス解析部116は、実行時間(通常)の値を実行時間(予測)の値とするように、対象ジョブのデータベースアクションジョブネット管理情報テーブル214を更新する(ステップS416;上記項目〔1−6−2−1〕および図19参照)。この後、DBアクセス解析部116は、処理を終了し、一時間のスリープ処理を行なう。
一方、トランザクション量(実績)がトランザクション量(通常)よりも多い場合(ステップS412のYESルート)、DBアクセス解析部116は、項目〔1−6−2−2〕で上述した式(1)によって算出した値を、実行時間(予測)の値とするように、対象ジョブのデータベースアクションジョブネット管理情報テーブル214を更新する(ステップS413;上記項目〔1−6−2−2〕および図20参照)。
この後、DBアクセス解析部116は、各ジョブの予測実行時間に基づき、デッドライン時刻までのクリティカルパスを再評価する。また、DBアクセス解析部116は、再評価されたクリティカルパス上に存在するジョブネットのジョブネット名を、図52に示すように、クリティカルパス管理情報テーブル216に設定する(ステップS414)。
そして、DBアクセス解析部116は、クリティカルパス上のジョブネット内の全てのジョブの予測実行時間の総和に基づいて算出される予測終了時刻が、デッドライン時刻を超えているか否かを判断する(ステップS415)。予測終了時刻がデッドライン時刻を超えていない場合(ステップS415のNOルート)、DBアクセス解析部116は、処理を終了し、一時間のスリープ処理を行なう。
予測終了時刻がデッドライン時刻を超えている場合(ステップS415のYESルート)、DBアクセス解析部116は、前倒しジョブ決定部114に図43〜図45の処理を実行させてから(ステップS417)、処理を終了し、一時間のスリープ処理を行なう。
〔4−6〕前倒しジョブ決定部の動作
次に、図43〜図45に示すフローチャートに従って、本実施形態のスケジュール装置1における前倒しジョブ決定部114の動作について説明する。
〔4−6−1〕日中に前倒しする夜間バッチ処理の選択(上記項目〔1−7−1〕の処理参照)
図43に示すフローチャート(ステップS501〜S507)および図44に示すフローチャート(ステップS511〜S518)に従って、前倒しジョブ決定部114による、日中に前倒しする夜間バッチ処理の選択動作について説明する。
前倒しジョブ決定部114は、まず、図43に示すように、前倒し候補一覧テーブル217の作成処理(上記項目〔1−7−1〕の手順(e1)および(e2)参照)を開始する。つまり、前倒しジョブ決定部114は、前倒し可能ジョブ一覧テーブル213から同一ジョブネットに関する複数のレコードを取り出す(ステップS501)。前倒しジョブ決定部114は、登録情報(レコード)が存在しレコードの取り出しに成功したか否かを判断する(ステップS502)。レコードの取り出しに成功した場合(ステップS502のYESルート)、前倒しジョブ決定部114は、取り出したレコード内に、前倒し可能フラグが“ON”のレコードが存在するか否かを判断する(ステップS503)。
前倒し可能フラグが“ON”のレコードが存在する場合(ステップS503のYESルート)、前倒しジョブ決定部114は、当該ジョブネットがクリティカルパス管理テーブル216(図52参照)に登録されているか否かを判断する(ステップS504)。当該ジョブネットがクリティカルパス管理テーブル216に登録されている場合(ステップS504のYESルート)、前倒しジョブ決定部114は、前倒し候補一覧テーブル217に、以下の情報を登録する(ステップS505)。つまり、前倒し候補一覧テーブル217の[ジョブネット名]欄に、当該ジョブネットのジョブネット名が登録される。また、前倒し候補一覧テーブル217の[前倒し可能なバッチジョブ名]欄に、当該ジョブネットレコード内の前倒し可能フラグが“ON”となっているジョブのジョブ名が登録される。
その後、前倒しジョブ決定部114は、前倒し候補一覧テーブル217の[前倒し可能なバッチジョブ名]欄に登録された各ジョブについて、データベースアクセスジョブネット管理情報テーブル214から、実行時間(予測)の値を取り出す。そして、前倒しジョブ決定部114は、取り出した各ジョブの実行時間(予測)の値の合計を算出し、当該合計を、前倒し候補一覧テーブル217の[前倒し可能なバッチジョブの予測実行時間の合計]欄に登録する(ステップS506;図21参照)。
さらに、前倒しジョブ決定部114は、前倒し候補一覧テーブル217の[前倒し可能なバッチジョブの予測実行時間の合計]欄の値が大きい順に、優先度を示す値“1”〜“n”(整数値で昇順)を、[前倒し優先度]欄に登録する(ステップS507;図21参照)。
優先度の登録を完了した後、または、前倒し可能フラグが“ON”のレコードが存在しない場合(ステップS503のNOルート)、または、当該ジョブネットがクリティカルパス管理テーブル216に登録されている場合(ステップS504のNOルート)、前倒しジョブ決定部114は、ステップS501の処理に戻る。
レコードの取り出しに失敗した場合(ステップS502のNOルート)、前倒しジョブ決定部114は、前倒し候補一覧テーブル217の作成処理を終了する。このとき、前倒し候補一覧テーブル217が作成されなかった場合、前倒しジョブ決定部114は処理を終了する。一方、前倒し候補一覧テーブル217が作成された場合、前倒しジョブ決定部114は、図44に示す処理、つまり「デッドライン時刻までにバッチ処理が完了するか否かのチェック処理」(上記項目〔1−7−1〕の手順(e3)〜(e7)参照)を開始する。
前倒しジョブ決定部114は、当該チェック処理を開始すると、図44に示すように、前倒し候補一覧テーブル217に、前倒し優先度Nb(初期値は1)のジョブネットが存在するか否かを判断する(ステップS511)。前倒し優先度Nbのジョブネットが存在する場合(ステップS511のYESルート)、前倒しジョブ決定部114は、前倒しジョブ群一覧テーブル218に、以下の情報を登録する(ステップS512)。つまり、前倒しジョブ群一覧テーブル218の[ジョブネット名]欄に、当該ジョブネットのジョブネット名が登録される。また、前倒しジョブ群一覧テーブル218の[前倒しジョブ群]欄に、当該ジョブネットの“前倒し可能なバッチジョブ”のジョブ名が登録される。
この後、前倒しジョブ決定部114は、図42に示す処理で明確になる当該バッチ処理の「デッドライン時刻からのオーバ時間」を取得する(ステップS513)。前倒しジョブ決定部114は、取得した「デッドライン時刻からのオーバ時間」から、「前倒し候補一覧テーブル217の前倒し優先度Nbのレコード(行)に記載されている予測実行時間の合計」を減算する。前倒しジョブ決定部114は、減算結果を、新たな「デッドライン時刻からのオーバ時間」とする(ステップS514)。
そして、前倒しジョブ決定部114は、新たな「デッドラインからのオーバ時間」が0以下であるか否かを判断する(ステップS515)。新たな「デッドラインからのオーバ時間」が0以下である場合(ステップS515のYESルート)、前倒しジョブ決定部114は、1つ、または複数のバッチ処理を前倒しすることで、デッドライン時刻までに処理が完了すると判断される(ステップS517)。前倒しジョブ決定部114は、デッドライン時刻までに処理が完了すると判断すると、上記「チェック処理」を終了する(ステップS518)。
一方、新たな「デッドラインからのオーバ時間」が0よりも大きい場合(ステップS515のNOルート)、前倒しジョブ決定部114は、処理がデッドライン時刻までに完了しないと判断する。そして、前倒しジョブ決定部114は、前倒し優先度Nbに1を加算してから(ステップS516)、ステップS511以降の処理を繰り返し実行する。
また、前倒し優先度Nbのジョブネットが存在しない場合(ステップS511のNOルート)、前倒しジョブ決定部114は、上記「チェック処理」を終了する(ステップS518)。なお、ステップS518で上記「チェック処理」を終了するに当たり、前倒しジョブ決定部114は、以下のいずれかの処理を実行する。つまり、デッドライン時刻までに処理が完了すると判断された場合、前倒しジョブ決定部114は、図45に示す処理、つまり「日中の実行開始時刻の決定処理」を開始する。また、上記以外の場合、前倒しジョブ決定部114は、アラームをシステム管理者等に対し通知し、前倒しを実行させない。
〔4−6−2〕日中における夜間バッチ処理の実行開始時刻の決定(上記項目〔1−7−2〕の処理参照)
図45に示すフローチャート(ステップS521〜S528)に従って、前倒しジョブ決定部114による、日中における夜間バッチ処理の実行開始時刻の決定動作(上記項目〔1−7−2〕の手順(f1)〜(f4)参照)について説明する。
前倒しジョブ決定部114は、前倒しジョブ群一覧テーブル218の[前倒し実行回数]欄に“0”を設定する(ステップS521)。そして、前倒しジョブ決定部114は、前倒しジョブ群一覧テーブル218から、ジョブネットのレコードを、先頭から順に一つずつ取り出す(ステップS522)。前倒しジョブ決定部114は、レコードが存在しレコードの取り出しに成功したか否かを判断する(ステップS523)。
レコードの取り出しに成功した場合(ステップS523のYESルート)、前倒しジョブ決定部114は、以下の処理を実行する。つまり、前倒しジョブ決定部114は、取り出したジョブネットレコードのジョブ群の実行依頼を、上記ジョブ前倒し実行制御機能(図28参照)およびジョブ起動依頼部110経由でジョブ実行部12に発行する。また、前倒しジョブ決定部114は、前倒しジョブ群一覧テーブル218の[前倒し実行開始時刻]欄に実行時刻を記入する(ステップS524)。
そして、前倒しジョブ決定部114は、現在、実行中の処理について、日中バッチも含め、処理多重度が上限に達しているか否かを判断する(ステップS525)。処理多重度が上限に達している場合(ステップS525のYESルート)、前倒しジョブ決定部114は、5分間待機してから(ステップS526)、ステップS525の処理に戻る。これにより、バッチ処理の実行は保留され、処理多重度の空きが生じると、保留したバッチ処理の実行が開始される。一方、処理多重度が上限に達していない場合(ステップS525のNOルート)、前倒しジョブ決定部114は、ステップS522の処理に戻る。
レコードの取り出しに失敗した場合(ステップS523のNOルート)、前倒しジョブ決定部114は、以下の処理を行なう。つまり、前倒しジョブ決定部114は、前倒しジョブ群一覧テーブル218の前倒し実行開始時刻+60分の時刻が到来するのを待ち合わせる。そして、前倒しジョブ決定部114は、前倒しジョブ群一覧テーブル218に登録されている全てのジョブ群の実行依頼を、60分ごとに、上記ジョブ前倒し実行制御機能(図28参照)およびジョブ起動依頼部110経由でジョブ実行部12に発行する(ステップS527)。その際、ステップS525およびS526と同様の処理により、前倒しジョブ決定部114は、日中バッチも含め処理多重度が上限を超えて実行依頼を行なわないように制御する。
この後、前倒しジョブ決定部114は、オンライン業務停止時刻が到来したか否かを判断する(ステップS528)。オンライン業務停止時刻が到来していない場合(ステップS528のNOルート)、前倒しジョブ決定部114はステップS527の処理に戻る。一方、オンライン業務停止時刻が到来した場合(ステップS528のYESルート)、前倒しジョブ決定部114は、「日中の実行開始時刻の決定処理」を終了する。
〔4−7〕入力データ管理部の動作(上記項目〔1−8〕の処理参照)
次に、図46に示すフローチャート(ステップS601〜S605)に従って、本実施形態のスケジュール装置1における入力データ管理部117の動作(特に上記項目〔1−8−2〕の手順(h1)および(h2)参照)について説明する。
時刻が前倒しジョブ群一覧テーブル218の前倒し実行開始時刻になると、該当する前倒しジョブ群のジョブネットが起動される。ジョブネット起動の直後に、入力データ管理部117が起動され入力データの加工処理を行なう。まず、入力データ管理部117は、前倒しジョブ群一覧テーブル218の前倒し実行回数に1を加算する(ステップS601)。
そして、入力データ管理部117は、今回のジョブ実行がジョブネット定義による夜間バッチ実行であるか否か、つまり実行対象ジョブ群が夜間バッチ(最終回)で実行されるか否かを判断する(ステップS602)。ジョブネット定義による夜間バッチ実行でない場合(ステップS602のNOルート)、入力データ管理部117は、以下の処理を行なう。つまり、入力データ管理部117は、ジョブネットの入力データファイルinput001を、前倒し可能ジョブ一覧テーブル213の一時入力ファイル名input001_copy_nの一時入力ファイルとしてコピーする。その際、“n”の値として、前倒しジョブ群一覧テーブル218の前倒し実行回数が記入される(ステップS603)。
この後、入力データ管理部117は、今回の前倒し実行が2回目以降の前倒し実行か否か、つまり前倒しジョブ群一覧テーブル218の前倒し実行回数が2以上か否かを判断する(ステップS604)。前倒し実行回数が1である場合、つまり今回の前倒し実行が1回目の前倒し実行である場合(ステップS604のNOルート)、入力データ管理部117は処理を終了する。
前倒し実行回数が2以上である場合(ステップS604のYESルート)、入力データ管理部117は、以下の処理を行なう。つまり、入力データ管理部117は、入力データファイルinput001と前回の前倒し実行時に保存された一時入力ファイルinput001_copy_(n-1)とのデータ内容を比較し、一致したデータ分を入力データinput001から削除する(ステップS605)。これにより、未処理データが得られ、ジョブネットに入力される。この後、入力データ管理部117は処理を終了する。
また、今回のジョブ実行がジョブネット定義による夜間バッチ実行である場合、つまり実行対象ジョブ群が夜間バッチ(最終回)で実行される場合(ステップS602のYESルート)、入力データ管理部117は、ステップS605の処理へ移行する。
〔4−8〕ジョブ実行部の動作
次に、図47に示すフローチャート(ステップS701〜S710)および図48に示すフローチャート(ステップS711〜S715)に従って、本実施形態のスケジュール装置1におけるジョブ実行部118の動作について説明する。
ジョブ実行部118は、ジョブネットの実行開始に伴って起動され、まず、今回開始されたジョブネットが前倒しジョブ群一覧テーブル218に存在するか否かを判断する(ステップS701)。今回開始されたジョブネットが前倒しジョブ群一覧テーブル218に存在しない場合(ステップS701のNOルート)、ジョブ実行部118は、ジョブネット定義情報212(図51参照)に従って実行される(ステップS702;通常実行)。
今回開始されたジョブネットが前倒しジョブ群一覧テーブル218に存在する場合(ステップS701のYESルート)、ジョブ実行部118は、今回のジョブネット実行が前倒し実行処理であるか否かを判断する(ステップS703)。このとき、ジョブ実行部118は、前倒しジョブ群一覧テーブル218の前倒し実行開始時刻とシステム定義情報211のオンライン/バッチ切替時刻とを比較し、前倒し実行開始時刻が切り替え時刻よりも前か否かを判断する。
前倒し実行開始時刻が切り替え時刻よりも前である場合、ジョブ実行部118は、今回のジョブネット実行が前倒し実行処理であると判断し(ステップS703のYESルート)、入力データ管理部117で、入力データの加工(適切化)が行なわれる(ステップS704;図46のステップS605参照)。
この後、ジョブ実行部118は、実行対象のジョブが前倒しジョブ群一覧テーブル218の前倒しジョブ群に存在するか否かを判断する(ステップS705)。実行対象のジョブが前倒しジョブ群に存在する場合(ステップS705のYESルート)、ジョブ実行部118は、以下の処理を行なう。つまり、ジョブ実行部118は、ジョブを実行し、ジョブの実行に伴って得られた出力ファイルを、前倒し可能ジョブ一覧テーブル213に従い、“出力ファイル名_copy_n”(nは前倒し実行回数)にリネームして保存する(ステップS706)。
そして、ジョブ実行部118は、後続ジョブがあるか否かを判断し(ステップS707)、後続ジョブがある場合(ステップS707のYESルート)、ステップS705の処理に戻る。また、実行対象のジョブが前倒しジョブ群に存在しない場合(ステップS705のNOルート)、ジョブ実行部118は、ステップS707の処理へ移行する。後続ジョブがない場合(ステップS707のNOルート)、ジョブ実行部118は処理を終了する。
一方、前倒し実行開始時刻が切り替え時刻以降である場合、ジョブ実行部118は、今回のジョブネット実行が前倒し実行処理でないと判断し(ステップS703のNOルート)、今回のジョブ実行がジョブネット定義による起動であるか否かを判断する(ステップS708)。今回のジョブ実行がジョブネット定義による起動でない場合(ステップS708のNOルート)、ジョブ実行部118は処理を終了する。
今回のジョブ実行がジョブネット定義による起動である場合(ステップS708のYESルート)、入力データ管理部117によって図46に示す処理(ステップS605参照)が実行される(ステップS709)。そして、ジョブ実行部118は、夜間バッチ(最終回)のジョブネットの開始処理(図48に示す処理)を実行する(ステップS710)。
夜間バッチ(最終回)のジョブネットの開始処理が開始されると、図48に示すように、ジョブ実行部118は、ジョブを実行する(ステップS711)。そして、ジョブ実行部118は、実行したジョブが、前倒しジョブ群一覧テーブル218の前倒しジョブ群に存在する最後のジョブであるか否かを判断する(ステップS712)。実行したジョブが、前倒しジョブ群一覧テーブル218の前倒しジョブ群に存在する最後のジョブでない場合(ステップS712のNOルート)、ジョブ実行部118は、実行したジョブに後続ジョブがあるか否かを判断する(ステップS713)。
後続ジョブがある場合(ステップS713のYESルート)、ジョブ実行部118は、ステップS711の処理に戻り、後続ジョブを実行する。一方、後続ジョブがない場合(ステップS713のNOルート)、ジョブ実行部118は、以下の処理を実行する。つまり、ジョブ実行部118は、前倒しジョブ群に存在するジョブ(最後のジョブを除く)について、出力データ管理部119に、出力データのマージ処理(図49に示す処理)を依頼し(ステップS714)、処理を終了する。
実行したジョブが、前倒しジョブ群一覧テーブル218の前倒しジョブ群に存在する最後のジョブである場合(ステップS712のYESルート)、ジョブ実行部118は、以下の処理を実行する。つまり、ジョブ実行部118は、出力データ管理部119に、出力データのマージ処理(図49に示す処理)を依頼し(ステップS715)、ステップS713の処理へ移行する。
〔4−9〕出力データ管理部の動作(上記項目〔1−8〕の処理参照)
次に、図49に示すフローチャート(ステップS801)に従って、本実施形態のスケジュール装置1における出力データ管理部119の動作(特に上記項目〔1−8−2〕の手順(h3)および(h4)参照)について説明する。前倒し実行したジョブ群の出力データは、前倒し実行ごとにファイルで保存されているため、出力データ管理部119によって実行される処理は、最終的に、前倒し実行ごとのファイルをマージして一つの出力ファイルにする処理である。
図49に示すように、出力データ管理部119は、ジョブの出力ファイルの内容と、前倒し実行時の出力ファイル00X_out_copy_1〜00X_out_copy_nの内容とをマージして、ジョブの出力ファイル名で保存する(ステップS801)。
〔5〕本実施形態の効果
夜間バッチを日中のオンライン業務の時間帯に前倒し実行する場合、現状の技術ではバッチ処理アプリケーション自身の処理内容を把握できないため、前倒しして分割実行可能なバッチジョブ群を識別することができない。このため、前倒し可能なバッチジョブ群を人手で定義するしかない。
また、オンライン処理の時間帯にオンライン処理とバッチ処理とを並行して実行することは、これまで夜間に1回で実行されていたバッチ処理を、複数回に分割して実行することになる。通常、夜間バッチ用に開発されたアプリケーションは、全データが揃った状態を前提にして、一括処理(1回で処理)するようになっているため、夜間バッチを分割して複数回処理するためには業務者(顧客)の資産であるアプリケーションを改修しなければならない。
これに対し、本実施形態によれば、バッチ処理を日中に前倒しし分割実行が可能なジョブ群を自動抽出する手法が確立される。つまり、データ処理を行なう各ジョブの入力データ件数と出力データ件数との相関関係から前倒し可能なジョブ群が特定される。その際、当該ジョブ群の各処理における業務DB更新状況やメッセージ発信/ファイル転送状況から他のバッチ処理への影響の有無が判断され、日中に前倒ししてはならないジョブやジョブ群が特定される。これにより、前倒ししても良いジョブ群を自動的に抽出することができる。
また、本実施形態によれば、1日分の全データが揃った状態を前提にして一括処理する仕様の夜間バッチアプリケーションを改修することなく、バッチ処理を複数回に分割実行しても、同一データの二重処理やデータ不整合などの問題が生じない手段が確立される。つまり、1回目の前倒し実行〜n回目の前倒し実行(最終実行)において、各時点で蓄積された最新データと前回実行時のデータとから差分が抽出され、処理すべき範囲のデータのみがアプリケーション(ジョブ)に入力され、同一データの二重処理が確実に回避される。さらに、1回目の前倒し実行〜n回目の前倒し実行(最終実行)で出力されたデータが、順序性を維持しながら保存され、最後に全データを結合(マージ)することで、夜間に全データに対し一括処理を行なう場合と同一の結果(出力データ)を得ることできる。
これにより、本実施形態では、夜間バッチ処理を自動的に日中に前倒しし、オンライン処理と並列的に分割実行することで、夜間バッチ処理の遅延が大幅に削減され、デッドライン突き抜けが確実に抑止される。つまり、オンライン処理の開始(デッドライン)までに夜間バッチ処理を確実に完了させることができる。特に、オンライン業務の実行時間が長くなりバッチ業務の実行時間が短くなり、且つ、想定を超えた突発的なデータ量増加が発生しうる現状であっても、オンライン業務と並列実行することで、バッチ業務の遅延が抑止されデッドラインの突き抜けが抑止される。
以上詳述したように、本実施形態によれば、オンライン業務の最中に遅延を検知した場合、バッチ業務を前倒ししてオンライン業務と並列実行させることで、確実にデッドラインまでの猶予時間が増え、バッチ業務の突き抜けを確実に抑止することができる。また、バッチ業務の前倒しを、人手ではなく自動で実行することで、人手で実施するスケジュールの再構築やメンテナンスに比べコストが大幅に削減され、且つ人的ミスによる業務の運用品質の低下を防ぐこともできる。
〔6〕その他
以上、本発明の好ましい実施形態について詳述したが、本発明は、係る特定の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内において、種々の変形、変更して実施することができる。
〔7〕付記
以上の各実施形態を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
コンピュータに、
スケジュールされた、第1期間での第1処理と、前記第1期間後の第2期間での第2処理とのうち、前記第2処理から、データ抽出処理を行なう抽出ジョブと、当該抽出ジョブによって抽出されるデータ群に対する処理を当該データ群の範囲内で行なう後続ジョブとを含むジョブ群を抽出し、
前記抽出されたジョブ群を、前記第2期間から前記第1期間に前倒しして実行する、
処理を実行させる、処理プログラム。
(付記2)
前段のジョブから入力された一の前記データ群に対する一以上の前記処理を行ない一以上の出力データ群を出力するジョブを、前記後続ジョブとして抽出する、
処理を前記コンピュータに実行させる、付記1記載の処理プログラム。
(付記3)
他の業務との連携処理を行なうジョブが前記ジョブ群に含まれる場合、当該ジョブ群を前記前倒しの対象から除外する、
処理を前記コンピュータに実行させる、付記1または付記2に記載の処理プログラム。
(付記4)
メッセージ発行処理を行なう出力ジョブ、または、ファイル転送処理を行なう出力ジョブ、または、出力が他の業務の開始契機になっている出力ジョブが前記後続ジョブに含まれる場合、前記ジョブ群のうち、前記抽出ジョブから前記出力ジョブの直前の後続ジョブまでのジョブを前記前倒しの対象とする、
処理を前記コンピュータに実行させる、付記1〜付記3のいずれか一項に記載の処理プログラム。
(付記5)
前記ジョブ群を前倒しして実行する実行タイミングを、前記第1処理の処理状況に応じて設定する、
処理を前記コンピュータに実行させる、付記1〜付記4のいずれか一項に記載の処理プログラム。
(付記6)
前記第2処理によって用いられるデータベースに対する前記第1処理のトランザクション量を前記第1処理の処理状況として監視し、
前記第1処理のトランザクション量に基づいて前記第2処理の予測実行時間を算出し、
前記第2処理の予測実行時間に基づいて前記第2処理が予め設定された完了期限までに完了するか否かを判断し、
前記第2処理が前記完了期限までに完了しないと判断されたタイミングに応じて、前記実行タイミングを設定する、
処理を前記コンピュータに実行させる、付記5記載の処理プログラム。
(付記7)
前記ジョブ群を前記実行タイミングで実行する場合、前記ジョブ群による処理済みのデータを除いた未処理データを、前記ジョブ群による処理対象として前記ジョブ群に入力する、
処理を前記コンピュータに実行させる、付記5または付記6に記載の処理プログラム。
(付記8)
前記第1期間から前記第2期間になった場合、前記ジョブ群による処理済みのデータを除いた最終未処理データを、前記ジョブ群による最終処理対象として前記ジョブ群に入力し、
前記実行タイミング毎に前記未処理データについて前記ジョブ群によって得られた第1部分出力データと、前記最終未処理データについて前記ジョブ群によって得られた第2部分出力データとを出力データとしてマージし、
マージされた前記出力データに対し、前記第2処理における前記ジョブ群以降のジョブを実行する、
処理を前記コンピュータに実行させる、付記7記載の処理プログラム。
(付記9)
前記第1期間から前記第2期間になった場合、前記実行タイミング毎に前記ジョブ群に属する各ジョブによって得られた部分中間出力データを、前記各ジョブ毎に中間出力データとしてマージして出力する、
処理を前記コンピュータに実行させる、付記8記載の処理プログラム。
(付記10)
前記第1処理はオンライン処理であり、前記第2処理はバッチ処理である、付記1〜付記9のいずれか一項に記載の処理プログラム。
(付記11)
前記抽出されたジョブ群を、前記第2期間から前記第1期間に前倒しして前記第1処理と並行して実行する、
処理を前記コンピュータに実行させる、付記1〜付記10のいずれか一項に記載の処理プログラム。
(付記12)
スケジュールされた、第1期間での第1処理と、前記第1期間後の第2期間での第2処理とのうち、前記第2処理から、データ抽出処理を行なう抽出ジョブと、当該抽出ジョブによって抽出されるデータ群に対する処理を当該データ群の範囲内で行なう後続ジョブとを含むジョブ群を抽出する抽出部と、
前記抽出されたジョブ群を、前記第2期間から前記第1期間に前倒しして実行する制御部と、を備える、処理装置。
(付記13)
前記抽出部は、
前段のジョブから入力された一の前記データ群に対する一以上の前記処理を行ない一以上の出力データ群を出力するジョブを、前記後続ジョブとして抽出する、付記12記載の処理装置。
(付記14)
前記抽出部は、
他の業務との連携処理を行なうジョブが前記ジョブ群に含まれる場合、当該ジョブ群を前記前倒しの対象から除外する、付記12または付記13に記載の処理装置。
(付記15)
前記抽出部は、
メッセージ発行処理を行なう出力ジョブ、または、ファイル転送処理を行なう出力ジョブ、または、出力が他の業務の開始契機になっている出力ジョブが前記後続ジョブに含まれる場合、前記ジョブ群のうち、前記抽出ジョブから前記出力ジョブの直前の後続ジョブまでのジョブを前記前倒しの対象とする、
付記12〜付記14のいずれか一項に記載の処理装置。
(付記16)
前記ジョブ群を前倒しして実行する実行タイミングを、前記第1処理の処理状況に応じて設定する解析部を、さらに備える、付記12〜付記15のいずれか一項に記載の処理装置。
(付記17)
前記解析部は、
前記第2処理によって用いられるデータベースに対する前記第1処理のトランザクション量を前記第1処理の処理状況として監視し、
前記第1処理のトランザクション量に基づいて前記第2処理の予測実行時間を算出し、
前記第2処理の予測実行時間に基づいて前記第2処理が予め設定された完了期限までに完了するか否かを判断し、
前記第2処理が前記完了期限までに完了しないと判断されたタイミングに応じて、前記実行タイミングを設定する、
付記16記載の処理装置。
(付記18)
前記ジョブ群を前記実行タイミングで実行する場合、前記ジョブ群による処理済みのデータを除いた未処理データを、前記ジョブ群による処理対象として前記ジョブ群に入力する入力データ管理部を、さらに備える、付記16または付記17に記載の処理装置。
(付記19)
前記入力データ管理部は、前記第1期間から前記第2期間になった場合、前記ジョブ群による処理済みのデータを除いた最終未処理データを、前記ジョブ群による最終処理対象として前記ジョブ群に入力し、
前記実行タイミング毎に前記未処理データについて前記ジョブ群によって得られた第1部分出力データと、前記最終未処理データについて前記ジョブ群によって得られた第2部分出力データとを出力データとしてマージする出力データ管理部と、
マージされた前記出力データに対し、前記第2処理における前記ジョブ群以降のジョブを実行するジョブ実行部と、をさらに備える、付記18記載の処理装置。
(付記20)
コンピュータが、
スケジュールされた、第1期間での第1処理と、前記第1期間後の第2期間での第2処理とのうち、前記第2処理から、データ抽出処理を行なう抽出ジョブと、当該抽出ジョブによって抽出されるデータ群に対する処理を当該データ群の範囲内で行なう後続ジョブとを含むジョブ群を抽出し、
前記抽出されたジョブ群を、前記第2期間から前記第1期間に前倒しして実行する、処理方法。