(57)【特許請求の範囲】
【請求項１】
リレーショナルデータベースのテーブルに対して出されたREAD命令を、前記テーブルを参照するSQL文による命令に変換して前記リレーショナルデータベースに発行する第1の制御手段と、
前記テーブルを一時的に記憶するキャッシュ記憶手段を有し、COBOLプログラムから前記リレーショナルデータベースの前記テーブルに対してREAD命令が出されたとき、前記テーブルに対する1回目のREAD命令であれば、前記第1の制御手段を通じて前記テーブルを取得して前記キャッシュ記憶手段に記憶すると共に前記テーブルの1つ目のレコードを前記COBOLプログラムに返却し、2回目以降のREAD命令であれば、前記キャッシュ記憶手段から前記テーブルの2つ目以降のレコードを読み出して前記COBOLプログラムに返却する第2の制御手段と
を有し、
前記第1の制御手段は、前記第2の制御手段に返却した前記テーブルを記憶する返却データ記憶手段を有し、前記返却データ記憶手段に記憶されている前記テーブルのオリジナルが前記リレーショナルデータベース上で更新されたときに前記返却データ記憶手段に記憶されている前記テーブルを更新すると共に前記第2の制御手段に更新通知を送信し、前記第2の制御手段から更新後のデータが要求された際に前記返却データ記憶手段に記憶されている前記テーブルから更新後のデータを読み出して返却し、
前記第2の制御手段は、前記キャッシュ記憶手段に記憶されている前記テーブルのうち前記更新通知のあったテーブルを更新中状態として管理し、更新中状態のテーブルに対して前記COBOLプログラムからREAD命令が出されたときは、前記第1の制御手段に対して要求を出して取得した更新後のデータを前記キャッシュ記憶手段の前記テーブルに反映した後に読み出しを行う
計算機システム。
【請求項２】
前記リレーショナルデータベースと前記第1の制御手段とを有する第1の計算機と、
前記第1の計算機と通信可能に接続され、前記第2の制御手段を有し、前記COBOLプログラムが動作する第2の計算機と
から構成される
請求項1に記載の計算機システム。
【請求項３】
前記第1の制御手段は、レコード単位で更新の有無を管理し、前記第2の制御手段から更新後のデータが要求されたときは、更新されたレコードだけを前記更新後のデータとして返却する
請求項１または２に記載の計算機システム。
【請求項４】
前記第1の制御手段は、テーブル単位で更新の有無を管理し、前記第2の制御手段から更新後のデータが要求されたときは、更新されたテーブルを前記更新後のデータとして返却する
請求項１または２に記載の計算機システム。
【請求項５】
リレーショナルデータベースと、前記リレーショナルデータベースのテーブルに対して出されたREAD命令を、前記テーブルを参照するSQL文による命令に変換して前記リレーショナルデータベースに発行する第1の制御手段とを有する第1の計算機と、前記第1の計算機と通信可能に接続され、前記テーブルを一時的に記憶するキャッシュ記憶手段を有し、COBOLプログラムから前記リレーショナルデータベースの前記テーブルに対してREAD命令が出されたとき、前記テーブルに対する1回目のREAD命令であれば、前記第1の制御手段を通じて前記テーブルを取得して前記キャッシュ記憶手段に記憶すると共に前記テーブルの1つ目のレコードを前記COBOLプログラムに返却し、2回目以降のREAD命令であれば、前記キャッシュ記憶手段から前記テーブルの2つ目以降のレコードを読み出して前記COBOLプログラムに返却する第2の制御手段を有し、前記COBOLプログラムが動作する第2の計算機とから構成される計算機システムが実行する制御方法であって、
前記第1の制御手段は、前記第2の制御手段に返却した前記テーブルを記憶する返却データ記憶手段を有し、前記返却データ記憶手段に記憶されている前記テーブルのオリジナルが前記リレーショナルデータベース上で更新されたときに前記返却データ記憶手段に記憶されている前記テーブルを更新すると共に前記第1の計算機に更新通知を送信し、前記第2の制御手段から更新後のデータが要求された際に前記返却データ記憶手段に記憶されている前記テーブルから更新後のデータを読み出して返却し、
前記第2の制御手段は、前記キャッシュ記憶手段に記憶されている前記テーブルのうち前記更新通知のあったテーブルを更新中状態として管理し、更新中状態のテーブルに対して前記COBOLプログラムからREAD命令が出されたときは、前記第1の制御手段に対して要求を出して取得した更新後のデータを前記キャッシュ記憶手段の前記テーブルに反映した後に読み出しを行う
計算機システムの制御方法。
【請求項６】
リレーショナルデータベースと記憶手段とを有し、COBOLプログラムが動作するコンピュータを、
前記リレーショナルデータベースのテーブルに対して出されたREAD命令を、前記テーブルを参照するSQL文による命令に変換して前記リレーショナルデータベースに発行する第1の制御手段と、
前記テーブルを一時的に記憶するキャッシュ記憶手段を有し、前記COBOLプログラムから前記リレーショナルデータベースの前記テーブルに対してREAD命令が出されたとき、前記テーブルに対する1回目のREAD命令であれば、前記第1の制御手段を通じて前記テーブルを取得して前記キャッシュ記憶手段に記憶すると共に前記テーブルの1つ目のレコードを前記COBOLプログラムに返却し、2回目以降のREAD命令であれば、前記キャッシュ記憶手段から前記テーブルの2つ目以降のレコードを読み出して前記COBOLプログラムに返却する第2の制御手段と
して機能させるためのプログラムであって、
前記第1の制御手段は、前記第2の制御手段に返却した前記テーブルを記憶する返却データ記憶手段を有し、前記返却データ記憶手段に記憶されている前記テーブルのオリジナルが前記リレーショナルデータベース上で更新されたときに前記返却データ記憶手段に記憶されている前記テーブルを更新すると共に前記第2の制御手段に更新通知を送信し、前記第2の制御手段から更新後のデータが要求された際に前記返却データ記憶手段に記憶されている前記テーブルから更新後のデータを読み出して返却し、
前記第2の制御手段は、前記キャッシュ記憶手段に記憶されている前記テーブルのうち前記更新通知のあったテーブルを更新中状態として管理し、更新中状態のテーブルに対して前記COBOLプログラムからREAD命令が出されたときは、前記第1の制御手段に対して要求を出して取得した更新後のデータを前記キャッシュ記憶手段の前記テーブルに反映した後に読み出しを行う
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は計算機システムに関し、特にCOBOLプログラムからリレーショナルデータベースのテーブルに対して出されたREAD命令をSQL文による命令に変換して発行する機能を有する計算機システムに関する。
【背景技術】
【０００２】
メインフレームからデータベースアクセスを行うCOBOLプログラムの動作に、データの入出力を行うための命令としてREAD/WRITE命令でファイルアクセスする方法がある。オープンサーバ上で動作するDBMSが提供するアクセス方法は主にSQLであり、READ/WRITE命令でのアクセス方法は提供していない。このため、マイグレーションとして、メインフレームのデータベースからオープンサーバ環境にあるデータベースに移行する場合、SQLを使用するように改修するか、READ/WRITE命令をエミュレーションしアクセスできる方法を提供する必要がある。前者の方法については、例えば特許文献1に記載される技術が知られている。後者については、例えば特許文献2〜4に記載される技術が知られている。本発明は後者の方法の改良に関する。
【０００３】
特許文献2〜4に記載される技術は何れも、COBOLプログラムからデータベースにREAD命令が出されると、そのREAD命令をSQL文に変換してデータベースに発行し、該当するテーブルの1レコードを取得してCOBOLプログラムに返却する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開2000-181697号公報
【特許文献２】特開2000-194588号公報
【特許文献３】特開2006-127337号公報
【特許文献４】特開平11-259294号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、COBOLプログラムからREAD命令が出される毎にREAD命令からSQL文への変換およびデータベースへの発行を行うと、COBOLプログラムがREAD命令を出してから結果を受け取るまでの時間が長くなり、性能が低下する。
【０００６】
本発明の目的は、上述した課題、すなわち、COBOLプログラムからREAD命令が出される毎にSQL文に変換してデータベースをアクセスすると性能が低下する、という課題を解決する計算機システムを提供することにある。
【課題を解決するための手段】
【０００７】
本発明の一形態にかかる計算機システムは、
リレーショナルデータベースのテーブルに対して出されたREAD命令を、上記テーブルを参照するSQL文による命令に変換して上記リレーショナルデータベースに発行する第1の制御手段と、
上記テーブルを一時的に記憶するキャッシュ記憶手段を有し、COBOLプログラムから上記リレーショナルデータベースの上記テーブルに対してREAD命令が出されたとき、上記テーブルに対する1回目のREAD命令であれば、上記第1の制御手段を通じて上記テーブルを取得して上記キャッシュ記憶手段に記憶すると共に上記テーブルの1つ目のレコードを上記COBOLプログラムに返却し、2回目以降のREAD命令であれば、上記キャッシュ記憶手段から上記テーブルの2つ目以降のレコードを読み出して上記COBOLプログラムに返却する第2の制御手段と
を有する、といった構成を採る。
【発明の効果】
【０００８】
本発明は上述したような構成を有するため、2つ目以降のREAD命令より、COBOLプログラムがREAD命令を出してから結果を受け取るまでの時間を短縮でき、性能が向上する。
【図面の簡単な説明】
【０００９】
【図１】本発明の第1の実施形態のブロック図である。
【図２】本発明の第2の実施形態のブロック図である。
【図３】本発明の第3の実施形態のブロック図である。
【図４】本発明の第3の実施形態における返却データ管理手段の結果データの管理フラグの種類と意味を示す図である。
【図５】本発明の第3の実施形態における返却データ管理手段の結果データを管理するテーブルの構成例を示す図である。
【図６】本発明の第3の実施形態においてCOBOLプログラムがREAD命令を出した際の動作を示す図である。
【図７】本発明の第3の実施形態においてCOBOLプログラムがWRITE命令を出した際の動作を示す図である。
【図８】本発明の第3の実施形態におけるデータベース更新発生時の動作説明図である。
【図９】本発明の第3の実施形態におけるデータベース更新発生時の別の動作説明図である。
【図１０】本発明の第3の実施形態における更新レコード受信処理のフローチャートである。
【図１１】本発明の第3の実施形態における更新確定処理のフローチャートである。
【図１２】本発明の第4の実施形態のブロック図である。
【発明を実施するための形態】
【００１０】
次に本発明の実施の形態について図面を参照して詳細に説明する。
[第1の実施形態]
図1を参照すると、本発明の第1の実施形態にかかる計算機システムは、相互に通信可能は第1の計算機100と第2の計算機200とから構成される。
【００１１】
第1の計算機100は、リレーショナルデータベース（RDB）110と第1の制御手段120とを有する。また、第2の計算機200は、第2の制御手段220を有し、COBOLプログラム210が動作する。
【００１２】
第1の制御手段120は、第2の制御手段220からリレーショナルデータベース110のテーブルに対して出されたREAD命令を、そのテーブルを参照するSQL文による命令に変換してリレーショナルデータベース110に発行し、取得したテーブルを第2の制御手段220に返却する機能を有する。また、第1の制御手段120は、リレーショナルデータベース110のテーブルに対して出されたWRITE命令を、そのテーブルを更新するSQL文による命令に変換してリレーショナルデータベース110に発行する機能を有していてもよい。
【００１３】
第2の制御手段220は、リレーショナルデータベース110から取得したテーブルを一時的に記憶するキャッシュ記憶手段230を有する。また、第2の制御手段220は、COBOLプログラム210からリレーショナルデータベース110のテーブルに対してREAD命令が出されたとき、そのテーブルに対する1回目のREAD命令であれば、第1の制御手段120を通じて上記テーブルを取得してキャッシュ記憶手段230に記憶すると共に、そのテーブルの1つ目のレコードをCOBOLプログラム210に返却する機能を有する。また、2回目以降のREAD命令であれば、キャッシュ記憶手段230に記憶されている上記テーブルの2つ目以降のレコードを読み出し、COBOLプログラムに返却する機能を有する。ここで、何回目のREAD命令であるかは、例えば、COBOLプログラム210の動作開始後あるいはテーブルのオープン後、何回目のREAD命令であるかによってカウントする。また、第2の制御手段220は、COBOLプログラム210からリレーショナルデータベース110のテーブルに対してWRITE命令が出されたとき、そのWRITE命令を第1の制御手段120に送信して処理させるようにしてもよい。
【００１４】
次に本実施形態の動作を説明する。
【００１５】
第2の計算機200でCOBOLプログラム210が動作を開始し、リレーショナルデータベース110に対して最初のREAD命令を出力すると、第2の制御手段220は、そのREAD命令を第1の計算機100の第1の制御手段120へ送信する。
【００１６】
第1の制御手段120は、受信したREAD命令を、リード対象となるテーブルを参照するSQL文による命令に変換してリレーショナルデータベース110に発行する。そして、取得したテーブルを第2の計算機200の第2の制御手段220に返却する。
【００１７】
第2の制御手段220は、受信したテーブルをキャッシュ記憶手段230に記憶すると共に、そのテーブルの1つ目のレコードをCOBOLプログラム210に返却する。
【００１８】
続いてCOBOLプログラム210が、同じテーブルに対して2回目のREAD命令を出すと、第2の制御手段220は、キャッシュ記憶手段230に記憶されているテーブルの2つ目のレコードを読み出し、COBOLプログラム210に返却する。COBOLプログラム210が、同じテーブルに対して3回目以降のREAD命令を出した場合も同様に、第2の制御手段220は、キャッシュ記憶手段230に記憶されているテーブルの3つ目以降のレコードを読み出し、COBOLプログラム210に返却する。
【００１９】
このように本実施形態によれば、2つ目以降のREAD命令より、SQL文への変換およびリレーショナルデータベース110へのSQL文の発行の処理を省くことができ、COBOLプログラム210がREAD命令を出してから結果を受け取るまでの時間を大幅に短縮することができる。また、第1および第2の計算機間の通信の頻度を少なくすることができる。
【００２０】
[第2の実施形態]
上記の第1の実施形態では、COBOLプログラムが参照しているリレーショナルデータベースは、そのCOBOLプログラムや他のプログラムから更新されないような動作環境を想定した。これに対して、本実施形態は、参照中のテーブルが同じCOBOLプログラムや他のプログラムから更新される動作環境を前提とする。
【００２１】
図2を参照すると、本発明の第2の実施形態にかかる計算機システムは、相互に通信可能は第1の計算機300と第2の計算機400とから構成される。
【００２２】
第1の計算機300は、リレーショナルデータベース310と第1の制御手段320とを有する。また、第2の計算機400は、第2の制御手段420を有し、COBOLプログラム410が動作する。
【００２３】
第1の制御手段320は、第2の制御手段420からリレーショナルデータベース310のテーブルに対して出されたREAD命令を、そのテーブルを参照するSQL文による命令に変換してリレーショナルデータベース310に発行し、取得したテーブルを第2の制御手段420に返却する機能を有する。また、第1の制御手段320は、リレーショナルデータベース310のテーブルに対して出されたWRITE命令を、そのテーブルを更新するSQL文による命令に変換してリレーショナルデータベース310に発行する機能を有していてもよい。
【００２４】
さらに第1の制御手段320は、第2の制御手段420に返却したテーブルを記憶する返却データ記憶手段330を有する。また第1の制御手段320は、返却データ記憶手段330に記憶されているテーブルのオリジナルがリレーショナルデータベース310上で更新されたときに、返却データ記憶手段330に記憶されているテーブルを更新すると共に、第2の計算機400の第2の制御手段420に更新通知を送信する機能を有する。ここで、「更新されたとき」は、COMMITにより更新が確定したときであってもよいし、COMMIT前の更新時であってもよい。
【００２５】
また第1の制御手段320は、第2の制御手段420から更新後のデータが要求された際に、返却データ記憶手段330に記憶されているテーブルから更新後のデータを読み出して返却する機能を有する。第1の制御手段320は、レコード単位で更新の有無を管理し、第2の制御手段420から更新後のデータが要求されたときに、更新されたレコードだけを更新後のデータとして返却する。あるいは、第1の制御手段320は、テーブル単位で更新の有無を管理し、第2の制御手段420から更新後のデータが要求されたときは、更新されたテーブルを更新後のデータとして返却してもよい。
【００２６】
第2の制御手段420は、リレーショナルデータベース310から取得したテーブルを一時的に記憶するキャッシュ記憶手段430を有する。また、第2の制御手段420は、COBOLプログラム410からリレーショナルデータベース310のテーブルに対してREAD命令が出されたとき、そのテーブルに対する1回目のREAD命令であれば、第1の制御手段320を通じて上記テーブルを取得してキャッシュ記憶手段430に記憶すると共に、そのテーブルの1つ目のレコードをCOBOLプログラム410に返却する機能を有する。また、2回目以降のREAD命令であれば、キャッシュ記憶手段430に記憶されている上記テーブルの2つ目以降のレコードを読み出し、COBOLプログラム410に返却する機能を有する。また、第2の制御手段420は、COBOLプログラム410からリレーショナルデータベース310のテーブルに対してWRITE命令が出されたとき、そのWRITE命令を第1の制御手段320に送信して処理させるようにしてもよい。
【００２７】
さらに第2の制御手段420は、キャッシュ記憶手段430に記憶されているテーブルのうち第1の制御手段320から更新通知のあったテーブルを更新中状態として管理し、更新中状態のテーブルに対してCOBOLプログラム410からREAD命令が出されたときは、第1の制御手段320に対して要求を出して取得した更新後のデータをキャッシュ記憶手段430のテーブルに反映した後に読み出しを行う機能を有する。
【００２８】
次に本実施形態の動作を説明する。
【００２９】
第2の計算機400でCOBOLプログラム410が動作を開始し、リレーショナルデータベース310に対して最初のREAD命令を出力すると、第2の制御手段420は、そのREAD命令を第1の計算機300の第1の制御手段320へ送信する。
【００３０】
第1の制御手段320は、受信したREAD命令を、リード対象となるテーブルを参照するSQL文による命令に変換してリレーショナルデータベース310に発行する。そして、取得したテーブルを返却データ記憶手段330に記憶すると共に、第2の計算機400の第2の制御手段420に返却する。
【００３１】
第2の制御手段420は、受信したテーブルをキャッシュ記憶手段430に記憶すると共に、そのテーブルの1つ目のレコードをCOBOLプログラム410に返却する。
【００３２】
続いてCOBOLプログラム410が、同じテーブルに対して2回目のREAD命令を出すと、第2の制御手段420は、キャッシュ記憶手段430に記憶されているテーブルの2つ目のレコードを読み出し、COBOLプログラム410に返却する。
【００３３】
次に、COBOLプログラム410がREADしている上記テーブルのオリジナルがリレーショナルデータベース310上で更新されたとする。このとき、第1の制御手段320は、返却データ記憶手段330に記憶されているテーブルを更新すると共に、第2の制御手段420に更新通知を送信する。第2の制御手段420は、この更新通知を受信すると、キャッシュ記憶手段430に記憶されているテーブルのうち更新通知のあったテーブルを更新中状態として管理する。更新中状態か否かは、例えばテーブルに対応するフラグを設け、フラグを点灯する等の任意の方法でよい。
【００３４】
続いてCOBOLプログラム410が上記テーブルに対して3回目のREAD命令を出すと、第2の制御手段420は、上記テーブルが更新中状態として管理されているので、当該READ命令の処理を一時保留する。そして、第2の制御手段420は、第1の制御手段320に対して、上記テーブルを特定する情報を添えて更新後データを要求する。
【００３５】
第1の制御手段320は、上記の要求を受信すると、返却データ記憶手段330から更新後のデータを読み出し、第2の制御手段420へ返却する。
【００３６】
第2の制御手段420は、第1の制御手段320から更新後データを受信すると、受信した更新後のデータをキャッシュ記憶手段430の上記テーブルに反映する。また、更新中状態を解除する。そして、上記保留したREAD命令の処理を再開し、上記テーブルの3つ目のレコードを読み出してCOBOLプログラム410へ返却する。
【００３７】
このように本実施形態によれば、2つ目以降のREAD命令より、SQL文への変換およびリレーショナルデータベース310へのSQL文の発行の処理を省くことができ、COBOLプログラム410がREAD命令を出してから結果を受け取るまでの時間を大幅に短縮することができる。また、第1および第2の計算機間の通信の頻度を少なくすることができる。
【００３８】
さらに、READしているテーブルが更新された際には、更新前のテーブルでなく更新後のテーブルをREAD対象とすることができる。
【００３９】
なお、以上の第1および第2の実施形態は、COBOLプログラムが動作する計算機とリレーショナルデータベースが存在する計算機とが異なる計算機システムに本発明を適用した。しかし、本発明は、同じ計算機上にCOBOLプログラムとリレーショナルデータベースが存在する場合にも適用可能である。
【００４０】
[第3の実施形態]
[概要]
本実施形態は、メインフレーム上で動作するCOBOLプログラムにおいて、既存のアクセス方法であるREAD/WRITE命令を使って、オープンサーバ上のデータベースに対して効率的にアクセスする方法を提供する。また本実施形態は、データベースのテーブルに更新があったとき、更新レコードの更新項目について、更新前と更新後の内容を管理し、メインフレーム側が必要とする値のみ転送することで、転送回数と転送量を抑え、処理を効率化する。また本実施形態は、上記のシステムにおいて、メインフレーム上のCOBOLプログラムのREAD/WRITE命令とオープンサーバ上で作成されるSQL文の対応関係をR/W・SQL管理テーブルに記憶しておき、同じREAD、WRITE命令が実行された場合は再変換せずSQLを再利用することを可能にする。
【００４１】
[構成]
図3は本実施形態の構成を示している。メインフレーム1は、COBOL言語で作成したプログラム11、12を動作させることができ、COBOLプログラム11、12は共有データベース(DB)27へのアクセスをREAD/WRITE命令で行う。
【００４２】
メインフレーム1には、データアクセス位置管理手段13、結果データ管理手段14、COBOLプログラム1の結果データ15、COBOLプログラム2の結果データ16が含まれている。
【００４３】
結果データは、COBOLプログラムがオープンサーバ上のデータベースにアクセスを行った結果のデータを格納し、COBOLプログラム別にプログラム実行開始時に作成され、プログラムの実行終了時に消滅する。結果データは、第1および第2の実施形態におけるキャッシュ記憶手段に相当する。
【００４４】
データアクセス位置管理手段13は、COBOLプログラムが読み込み中のレコードの現在位置を管理し、読み込みの中断や再読み込みが発生した時、適切な位置から処理を再開することができる。
【００４５】
結果データ管理手段14は、各COBOLプログラムの結果データを管理し、該当するデータの格納や取り出しを行う。また、オープンサーバから更新通知を受信したときは、対象となる結果データを更新中状態とし、次のREAD要求で古いデータを読み込まないように動作を中断させる。次のREAD要求があったときには、オープンサーバ2の返却データ管理手段28に更新データの転送を要求し、データの転送完了後（反映完了後）に、読込を再開させる。
【００４６】
メインフレーム1は、オープンサーバ上のR/W・SQL管理手段21に含まれるRW-SQL変換手段22と返却データ管理手段28に含まれる結果データ転送手段30と、更新管理手段31に含まれる更新通知手段34と通信が可能となっている。
【００４７】
COBOLプログラムが動作するメインフレーム1と、READ/WRITE命令とSQLの変換を行うR/W-SQL管理手段21は、全て同一マシン上でも、別マシン上でも、または一部が別マシン上であってもよい。
【００４８】
オープンサーバ2のR/W-SQL管理手段21は、R/W-SQL変換手段22、R/W-SQL変換保存手段23、SQL発行手段24、結果保存手段25、R/W命令SQL管理テーブル26から構成される。
【００４９】
R/W-SQL変換手段22は、メインフレーム1のCOBOLプログラムからのREAD、WRITE命令を受信し、SQL文に変換する手段である。変換前のR/W命令とSQL文の対応は、R/W-SQL変換保存手段23によってR/W命令SQL管理テーブル26に記憶する。2回目以降の要求の場合、R/W-SQL変換手段22は、R/W命令SQL管理テーブル26に記憶されている変換結果を取得する。
【００５０】
SQL発行手段24は、R/W-SQL変換手段22で変換した結果のSQL文を共有DB27に対して発行し、結果を受け取る。共有DB27はメインフレーム1以外からのアクセも受け付ける、オープンサーバ上で動作するリレーショナルデータベースである。
【００５１】
結果保存手段25は、共有DB27にSQLアクセスした結果をSQL発行手段24から受け取り、結果データ29に保存する。結果保存手段25は、READ命令の結果のみ結果データに保存する。
【００５２】
返却データ管理手段28は、結果データ29、結果データ転送手段30から構成される。
【００５３】
結果データ29は、R/W・SQL管理手段21の結果保存手段25によって、共有DB27のアクセス結果が保存される。結果データ29は、図5に示される管理テーブルでレコード単位に状態管理を行う。結果データ29における、管理テーブル内の状態管理フラグの種類と意味を図4に示す。
【００５４】
図5に示されるように、レコードには主キーとしてレコードの登録順に値が振られている。また、結果データの状態を管理するフラグは、メインフレーム1の結果データと返却データ管理手段28の結果データ29を比較したときのデータの状態を表している。図4に示されるように、管理フラグは、ACTIVE/INACTIVE状態のどちらかになる。ACTIVEの場合、メインフレームの結果データは返却データ管理手段28で管理している結果データ29と同じ内容であり、最新の状態となっている。INACTIVEの場合、メインフレームの結果データと返却データ管理手段の結果データは異なり、メインフレームの結果データは、更新結果転送前の状態のデータになっている。INACTIVEは、どの手段でデータが更新されたかを表すUPDATE/INSERT/DELETEの３種類に分けられる。返却データ管理手段28の結果データはレコード単位に状態管理フラグで管理する。結果データ転送手段30は、メインフレーム1の結果データ管理手段14に対して、結果データ29に保存されたデータのうち、更新状態のレコードのみ転送する。
【００５５】
更新管理手段31は、更新結果記憶手段32、更新確定手段33、更新通知手段34から構成される。
【００５６】
更新結果記憶手段32は、共有DB27のテーブルの行が更新された場合（すなわち、DBから行の更新が通知された場合）、共有DB27から更新されたレコードの主キーと更新後の値を受け取り、更新レコードの情報を自手段32内の更新結果一時記憶領域に一時的に記憶しておく。更新されたテーブルが、メインフレームのCOBOLプログラムが使用していないテーブルの場合、何も記憶しない。COBOLプログラムから使用しているテーブルの場合は、更新が完了するまで、レコード内容を更新する。更新が連続で起こる場合は、全ての更新処理が完了するまで値を上書きする。
【００５７】
更新確定手段33は、全ての更新完了時（すなわち、DBからCOMMITが通知された場合）、図9に示すように、上記更新結果一時記憶領域に一時的に記憶している更新内容を結果データ29に反映する。このとき、更新結果記憶手段32の主キーから、結果データ29の更新前の値と比較し、既にあるレコードの場合はUPDATE、追加されたレコードの場合はINSERT、削除されたレコードの場合はDELETEの状態管理フラグを設定する。なお、更新が破棄された場合（すなわち、DBからROLLBACKが通知された場合）は、更新結果一時記憶領域を消去し、結果データ29の更新は行わない。
【００５８】
更新通知手段34は、共有DBからの更新を受信した後、その更新レコードが結果データ29に該当するレコードの場合は、メインフレーム1の結果データ管理手段14に更新通知を送信する。更新通知は、結果データ単位で送信され、結果データ管理手段14は対象となる結果データ15、16に対してデータ更新状態フラグをセットする。
【００５９】
＜結果データ29の保存項目＞
オープンサーバ上の結果データ29に保存する項目として、結果保存手段25から受信するSQL発行結果であるレコードデータ、結果データ状態管理フラグがある。これらは図5に示すように、主キーによってデータベースのレコードと対応づけられている。
【００６０】
＜更新結果記憶手段32の保存項目＞
更新結果記憶手段32に保存する項目として、テーブル名、主キー、レコード情報（列名、値）がある。これらの項目から、更新すべき結果データ29のレコードを特定する。
【００６１】
＜COBOLプログラム11、12の結果データの保存項目＞
COBOLプログラム11、12単位に結果データ15、16が作成され、各結果データに含まれる項目は、オープンサーバ2上でのSQLアクセスの結果であるレコード、データ更新状態フラグとなる。データ更新状態フラグは、オープンサーバで管理しているレコード単位のフラグとは異なり、テーブル単位で管理する。データ更新状態フラグは、オープンサーバ上の共有DB27で更新が発生した場合、即座に更新通知手段34から通知され、更新状態となる。COBOLプログラムから更新状態の結果データに読み込みが発生した場合は、新しい結果データをオープンサーバ上の結果データ29から取得する。読み込み中に更新状態になった場合は、読み込みを一時中断し、更新処理が完了した後、更新後の結果データを結果データ転送手段30から転送する。
【００６２】
[動作]
メインフレーム1が、オープンサーバ上のデータベースにREADアクセスを行う場合の動作を図6に示す。
【００６３】
メインフレーム1上のCOBOLプログラム11から1回目のREAD命令が発行されたとき、データアクセス位置管理手段13はオープンサーバ2上のR/W-SQL変換手段22にREAD要求を出す。
【００６４】
R/W-SQL変換手段22は、受け取ったREAD命令と同じデータ（テーブル）が取得できるSQL文を生成する。以前に同じREAD命令を実行している場合、変換は実行せず、R/W命令SQL管理テーブル26からREAD命令に該当するSQL文を取得する。新規に変換を行った場合は、R/W-SQL変換保存手段23がR/W命令SQL管理テーブルに変換内容としてREAD命令とSQL文の組み合わせを保存する。SQL発行手段24は、READ命令の変換結果であるSQL文を、共有DB27に発行し、結果を受け取る。受け取った結果は、結果保存手段25によって、結果データ29に保存される。結果データ29に格納されたデータは、結果データ転送手段30によってメインフレーム1の結果データ管理手段14に転送される。
【００６５】
結果データ管理手段14は、該当するCOBOLプログラムの結果データ15にデータを格納し、COBOLプログラムに先頭レコードを返却する。READ命令で次のレコードを読み込むときは、COBOLプログラム11は、自分の結果データ15に対してREAD命令を発行し、データを読み込む。データアクセス位置管理手段13は、読み込み位置を判断し、前回読み込んだ次のレコードから読み込めるよう管理する。
【００６６】
メインフレーム1が、オープンサーバ上のデータベースにWRITEアクセスを行う場合の動作を図7に示す。
【００６７】
COBOLプログラム11からWRITE命令があったとき、WRITE命令はデータアクセス位置管理手段13を経由し、オープンサーバ2のR/W-SQL変換手段22で、SQL文に変換される。初回の変換時には、R/W-SQL変換保存手段23によって変換後のSQL文とWRITE命令の対応が保存される。SQL発行手段24は、共有DB27に対して、SQLを発行し、更新結果をメインフレームに返却する。
【００６８】
メインフレーム1のCOBOLプログラムの結果データ15に存在するデータに対応する、共有DBのレコードが更新された場合の動作を図8、図9、図10に示す。
【００６９】
図8は、共有DBが更新された後の動作についての説明図である。既にCOBOLプログラムがREAD命令で共有DBにアクセスしたことがあり、結果データ管理手段14の結果データにREAD命令のデータが保存されている状態であるとする。この状態で、共有DBに対して更新が行われた場合（前記のCOBOLプログラム11からのWRITE要求により共有DBが更新された場合も含む）、更新管理手段31は更新されたレコードの属するテーブルや主キー、新旧値の情報を受信し、そのレコードが結果データ管理手段の結果データに含まれているテーブルとレコードかどうかを判断する。
【００７０】
含まれている場合、更新結果記憶手段32が、行の更新を契機として、共有DBから受け取った更新されたレコード情報を更新結果一時記憶領域に保存する。次に、DBから更新確定が通知されると、更新確定手段33が、更新結果一時記憶領域の中の新旧レコードの値を参照し、結果データ29を更新後の値で更新する。更新対象のレコードの判別は、レコードの生成順に設定された主キーで行い、該当する結果データのレコードの値の更新やレコードの追加、削除を行い、各レコードの更新状態フラグに対して、UPDATE、INSERT、DELETEのどれによって更新されたかを設定する。どのフラグを設定するかは、新旧の値を比較した結果で決定する。新旧両方の値が存在する場合はUPDATE、新しい値だけ存在する場合はINSERT、新しい値が存在しない場合はDELETEを設定する。続いて、結果データ29の更新後、更新通知手段34はメインフレームに更新通知を行い、該当するCOBOLプログラムの結果データに対して、結果データの内容が最新状態ではないことを通知する。
【００７１】
メインフレームは通知を受け取った後、対象となるメインフレームの結果データのデータ更新状態フラグを設定する。このフラグが設定されているときは、プログラムはデータの読み込みを一時中断する。
【００７２】
更新レコードの確定方法と転送の動作を図9を参照して説明する。
【００７３】
更新結果としてオープンサーバの結果データ29に反映されたレコードは、メインフレームで次のREADが実行されたとき、メインフレームの結果データ管理手段14からの要求によりメインフレームに送信される。このとき、状態管理フラグの種類によって、メインフレーム側結果データの反映方法が異なる。UPDATEフラグのレコードの場合、既存レコードに値を上書きする。INSERTフラグのレコードの場合、新規レコードとして後ろに追加する。DELETEフラグのレコードの場合、既存レコードを削除する。この反映方法により、メインフレームのデータベースに対するREAD命令でのアクセス方法と同様の結果が得られる。
【００７４】
更新開始から終了までの流れを図10、図11のフローチャートに示す。図10は、共有DBから更新されたレコードを受け取り、更新結果記憶手段の一時記憶領域に保存するまでの流れである。図11は、一時記憶領域に記憶されたレコードの、結果データへの反映処理の流れである。
【００７５】
[効果]
本実施形態によれば、必要なデータのみメインフレームに転送することができるため、データの転送量や転送回数を削減することができ、効率的なデータ転送を行うことができる。また、SQLアクセスを最小限にすることで、冗長なデータベースアクセスを防ぐことができ、データベースに対する負担を軽減する効果がある。
【００７６】
[第4の実施形態]
本実施形態では、更新をレコード単位で管理せず、再度SQL文を発行してデータを更新する。図12は本実施形態のブロック図である。
【００７７】
データベースの更新時に、レコード単位ではなく、テーブル単位で更新を検出し、再度SQLを発行しデータベースからデータを取得する。共有DB27は、テーブル単位で更新を検出し、結果データ更新手段35に更新されたテーブルを通知する。結果データ更新手段35は、更新されたテーブルが、結果データ29に格納されているかどうかを調べ、格納されている場合はSQL発行手段24にSQL文の再発行要求を出す。SQL発行手段24は、共有DB27にアクセスし、受信したデータを結果データ29に格納する。結果データ転送手段30は、結果データ管理手段14から更新後データが要求されると、更新されたテーブルを返却する。
【００７８】
本実施形態によれば、レコード単位で更新内容を管理する必要がなく、結果の反映が簡略化できる。
【００７９】
以上本発明の実施の形態について説明したが、本発明は以上の実施の形態にのみ限定されず、その他各種の付加変更が可能である。また、本発明は、その有する機能をハードウェア的に実現することは勿論、コンピュータとプログラムとで実現することができる。プログラムは、磁気ディスクや半導体メモリ等のコンピュータ可読記録媒体に記録されて提供され、コンピュータの立ち上げ時などにコンピュータに読み取られ、そのコンピュータの動作を制御することにより、そのコンピュータを前述した各実施の形態における第1および第2の制御手段として機能させる。
【産業上の利用可能性】
【００８０】
本発明は、リレーショナルデータベース等のデータベースにアクセスするCOBOLプログラムが稼働する計算機に利用できる。
【符号の説明】
【００８１】
100、300…第1の計算機
110、310…リレーショナルデータベース
120、320…第1の制御手段
200、400…第2の計算機
210、410…COBOLプログラム
220、420…第2の制御手段
230、430…キャッシュ記憶手段
330…返却データ記憶手段
【図１】
0005664389.tif 000002
【図２】
0005664389.tif 000003
【図３】
0005664389.tif 000004
【図４】
0005664389.tif 000005
【図５】
0005664389.tif 000006
【図６】
0005664389.tif 000007
【図７】
0005664389.tif 000008
【図８】
0005664389.tif 000009
【図９】
0005664389.tif 000010
【図１０】
0005664389.tif 000011
【図１１】
0005664389.tif 000012
【図１２】
0005664389.tif 000013