(57)【特許請求の範囲】
【請求項１】
記憶装置を備え、該記憶装置に格納されたデータベースへの問合せ要求を受信し、受信した問合せに基づいてデータベースに対してデータ操作を行うSQL実行環境手段と、前記SQL実行環境手段が使用するリソースを確保するリソース確保部と当該使用するリソースを解放するリソース解放部と、前記SQL実行環境手段と通信を行うプログラム実行環境手段とを有するデータベース管理装置におけるデータベース管理方法において、
前記SQL実行環境手段は、プログラム読み出しを開始し、ルーチンとプログラムの関連情報を取得し、前記リソース確保部に前記ルーチン呼び出しに伴うリソース種別をパラメタとして渡し、リソースの確保要求を行い、前記リソース確保部は前記取得したリソース種別をリソース管理テーブルおよび解放不可であるデータベースリソースを保持する解放リソース管理テーブルに登録し、
前記SQL実行環境手段は、前記プログラム関連情報から起動するプログラムを決定し、プログラム実行制御部にプログラム実行要求をし、
前記プログラム実行環境手段は、前記実行要求されたプログラムからSQLステートメントが発行されているかどうかを判定し、SQLステートメントが発行されている場合、SQL実行処理を開始し、前記SQL実行環境手段は、発行されたSQLステートメントを解析し、解析により、SQLステートメント実行に必要なリソースの種別を決定し、前記SQL実行環境手段は、前記リソース確保部に、前記リソース種別をパラメタとして渡し、リソースの確保要求を行い、前記リソース確保部は、パラメタとして取得したリソース種別を前記リソース管理テーブルに登録し、前記SQL実行環境手段は、SQLステートメント実行処理を終了し、
前記SQLステートメントが発行されていない場合、前記プログラム実行環境手段は、プログラムからCommitが発行されているかどうかを判定し、Commitが発行されている場合はCommit処理を開始し、前記SQL実行環境手段は、前記リソース解放部に、リソースの解放要求を行い、前記リソース解放部は、前記解放リソース管理テーブルおよび前記リソース管理テーブルを参照して解放するリソース種別を決定し、前記リソース管理テーブルに保持されており、かつ、前記解放リソース管理テーブルに保持されていないリソースを、解放するリソース種別として決定し、前記リソース解放部は、上記のリソース種別を前記リソース管理テーブルから削除し、前記SQL実行環境手段は、Commit処理を終了することを特徴とするデータベース管理方法。
【請求項２】
記憶装置を備え、該記憶装置に格納されたデータベースへの問合せ要求を受信し、受信した問合せに基づいてデータベースに対してデータ操作を行うSQL実行環境手段と、前記SQL実行環境手段が使用するリソースを確保するリソース確保部と当該使用するリソースを解放するリソース解放部と、前記SQL実行環境手段と通信を行うプログラム実行環境手段とを有するデータベース管理システムにおいて、
前記SQL実行環境手段は、
プログラム読み出しを開始し、ルーチンとプログラムの関連情報を取得し、前記リソース確保部に前記ルーチン呼び出しに伴うリソース種別をパラメタとして渡し、リソースの確保要求を行い、前記リソース確保部は前記取得したリソース種別をリソース管理テーブルおよび解放不可であるデータベースリソースを保持する解放リソース管理テーブルに登録し、
前記SQL実行環境手段は、前記プログラム関連情報から起動するプログラムを決定し、プログラム実行制御部にプログラム実行要求し、
前記プログラム実行環境手段は、前記実行要求されたプログラムからSQLステートメントが発行されているかどうかを判定し、SQLステートメントが発行されている場合、SQL実行処理を開始し、前記SQL実行環境手段は、発行されたSQLステートメントを解析し、解析により、SQLステートメント実行に必要なリソースの種別を決定し、前記SQL実行環境手段は、前記リソース確保部に、前記リソース種別をパラメタとして渡し、リソースの確保要求を行い、前記リソース確保部は、パラメタとして取得したリソース種別を前記リソース管理テーブルに登録し、前記SQL実行環境手段は、SQLステートメント実行処理を終了し、
前記SQLステートメントが発行されていない場合、前記プログラム実行環境手段は、プログラムからCommitが発行されているかどうかを判定し、Commitが発行されている場合はCommit処理を開始し、前記SQL実行環境手段は、前記リソース解放部に、リソースの解放要求を行い、前記リソース解放部は、前記解放リソース管理テーブルおよび前記リソース管理テーブルを参照して解放するリソース種別を決定し、前記リソース管理テーブルに保持されており、かつ、前記解放リソース管理テーブルに保持されていないリソースを、解放するリソース種別として決定し、前記リソース解放部は、上記のリソース種別を前記リソース管理テーブルから削除し、前記SQL実行環境手段は、Commit処理を終了することを特徴とするデータベース管理システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データベース管理技術に関し、処理要求に応じてプログラムを起動してデータベース処理要求を行う際のデータベースリソースを管理する技術に関するものである。
【０００２】
【従来の技術】
データベース言語SQLは、ユーザが定義した関数およびプロシジャをルーチンとして呼出す機能を持つ。上記関数およびプロシジャは、ルーチンの定義時に解析され、ルーチン名と関連付けられた実行モジュールとして登録される。実行モジュールとは、一連のデータベース処理手順を解析し、データベース管理システム内で実行できる形態にしたものである。ルーチン呼出し時にはルーチン名を指定することで、登録された実行モジュールに従いデータベース処理が行われる。
【０００３】
一方、文献(Andrew Eisenberg and Jim Melton, SQLJ - Part 1 : SQL Routines using the Java Programming Language, SIGMOD Record, Vol.28, No.4, December 1999)では、ルーチンとしてJava言語により記述されたプログラムを実行する機能について述べている。（Javaは、米国Sun Microsystems,Incの登録商標である）
この機能では、ルーチン定義時にプログラムがルーチン名と関連付けて登録される。ルーチン呼出し時には、データベース管理システムによりプログラム実行環境上でプログラムが実行される。プログラムからSQLステートメントが発行される際には、プログラム実行環境がデータベース管理システムを呼び返すことで実行モジュールが作成され、データベース処理が行われる。
【０００４】
【発明が解決しようとする課題】
発行するSQLステートメントがルーチン呼出しによるプログラム実行時に決定する環境下では、実行モジュールが実行時に作成され、SQLステートメント実行のためのデータベースリソースも実行時に決定される。データベースリソースとは、SQLステートメント実行のために必要なメモリ領域およびSQLステートメント実行のために確保するカーソル、ロックなどである。データベースリソースの中には、トランザクション解決が行われるまで確保すべきものがある。トランザクションとは、データベース回復のための最小単位として保証される一連のSQL操作である。commitまたはrollback要求にてトランザクション解決が行われ、トランザクション中に発行したSQLステートメントによるデータベース更新結果が保証または取り消される。
【０００５】
上記環境下では、プログラム実行中に発行されるSQLステートメントに関するデータベースリソースは、ルーチン呼出し用の実行モジュールの制御下にない。このため、データベースリソースは、ルーチン呼出し側で行っていたトランザクション解決に応じて管理していた。
【０００６】
ルーチン呼出しによって実行されるプログラム中でトランザクション解決を可能にすると、クライアント側で実行していたトランザクションを含むプログラムを、そのままルーチンとして実行することが可能となる。このためには、上記で示した、プログラム実行中に発行されるSQLステートメントに関するデータベースリソースの解放手段について考慮することが課題となる。
【０００７】
発明(U.S.P. 6006235)は、Java言語などのインタプリタ言語により記述されたプログラムをルーチンとして実行するための手法、手段に関して述べているが、プログラム実行中のトランザクション解決に関しては述べられていない。
【０００８】
本発明の目的は、上記課題を改善するために、他のプログラムで使用できるデータベースリソースを好適に解放するデータベース管理方法及びシステムを提供することにある。
【０００９】
【課題を解決するための手段】
上記課題を改善するために本発明では、請求項１もしくは請求項２の処理を行う。
これにより、他のプログラムで使用できるデータベースリソースを好適に解放することが可能となる。
【００１０】
【発明の実施の形態】
プログラム中からのトランザクション解決が可能な一実施形態のデータベース管理システムについて説明する。
まず、本発明の概念について図１を用いて簡単に説明する。
【００１１】
本実施形態のデータベース管理システムにおけるルーチン実行は、図１に示すように、SQL実行環境100、プログラム実行環境101、リソース確保部102、リソース解放部103、プログラム実行制御部104により行われる。ユーザからのルーチン呼出し要求に伴い、SQL実行環境100は、実行モジュール130を作成し実行する。ディクショナリ情報格納箇所110内のディクショナリ120に対し、ルーチンとプログラムとの関連情報を参照し、起動するプログラムを決定する。SQL実行環境100は、リソース確保部102に対しリソース種別150をパラメタとしてルーチン呼出しに伴うリソース140の確保要求を行う。リソース確保部102は、リソース種別150を解放リソース管理テーブル格納箇所111内の解放リソース管理テーブル121およびリソース管理テーブル格納箇所112内のリソース管理テーブル122に登録する。上記処理により、リソース種別150は、現在確保されているリソースであり、かつ、ルーチン呼出し終了まで解放不可であるリソースとして登録される。本発明における確保とは、リソースを割り当てたルーチン（プログラムともいう）にリソースのアクセス権限を与え、他のルーチンやプログラム実行制御部には同じアクセス権限を与えないというものである。例えば、書き込み権限の場合には、リソースが確保されていないプログラムからの書き込みはできないことになる。
【００１２】
ディクショナリより取得した関連情報に基づき、SQL実行環境は、プログラム実行制御部104に対し起動要求を行う。プログラム実行制御部104は、プログラム実行環境101に対しプログラム起動を行う。プログラム133がSelect文134を発行する場合、プログラム実行環境101は、SQL実行環境100にSelect文134の実行要求を行う。SQL実行環境100は、実行要求に基づき実行モジュール131を作成し実行する。SQL実行環境100は、リソース確保部102に対しリソース種別151をパラメタとしてSelect文実行に伴うリソース141の確保要求を行う。リソース確保部102は、リソース種別151をリソース管理テーブル格納箇所112内のリソース管理テーブル122に登録する。上記処理により、リソース種別151は、現在確保されているリソースとして登録される。
【００１３】
プログラム133がCommit135を発行する場合、プログラム実行環境101は、SQL実行環境100にCommit135の実行要求を行う。SQL実行環境100は、実行要求に基づき実行モジュール132を作成し実行する。SQL実行環境100は、リソース解放部103に対し、リソースの解放要求を行う。リソース解放部103は、解放リソース管理テーブル格納箇所111内の解放リソース管理テーブル121およびリソース管理テーブル格納箇所112内のリソース管理テーブル122を参照し、解放可能なリソース種別152を決定する。この決定は、リソース管理テーブル112に登録されているリソ−スで解放リソース解放テーブル111に登録されていないリソースを抽出することで行う。本例では、Ｔ１とＩ１がリソースを解放して良いことが分かる。リソース解放部103は、リソース管理テーブル格納箇所112内のリソース管理テーブル122から、リソース種別152を削除する。上記処理により、リソース種別152は、解放される。
【００１４】
次に、図２に本実施形態のデータベース管理システムの機能ブロックおよびハードウェア構成を示す。
コンピュータシステム200は、CPU210、主記憶装置211、磁気ディスク装置などの外部記憶装置202および多数の端末201で構成される。主記憶装置211上には、データベース管理システム220およびプログラム実行環境101が置かれる。外部記憶装置202上には、データベース管理システム220が管理するデータベース251およびディクショナリ252が格納される。また、データベース管理システム220およびプログラム実行環境101を実現する処理プログラム250も、外部記憶装置202上に格納される。
【００１５】
データベース管理システム220は、システム制御部230、SQL実行環境100、プログラム実行制御部104、データベースアクセス処理部231、ディクショナリアクセス処理部232で構成される。システム制御部230は、リソース確保部102、リソース解放部103、解放リソース管理テーブル121、リソース管理テーブル122で構成される。
端末201よりユーザが発行するSQL実行要求は、SQL実行環境100にて実行モジュール240、241として実行される。要求されたSQLステートメントがルーチン呼出しの場合、SQL実行環境100は、ディクショナリアクセス処理部232に対しルーチンと実行するプログラムの関連情報取得要求を行う。ディクショナリアクセス処理部232は、外部記憶装置202内のディクショナリ252に対し関連情報の参照を行い、SQL実行環境100に返却する。SQL実行環境100は、上記関連情報に基づき、プログラム実行制御部104に対しプログラム実行要求を行う。プログラム実行制御部104は、プログラム実行環境101にてプログラム242を実行する。
【００１６】
システム制御部230内のリソース確保部102は、SQL実行環境100でSQLステートメント実行時に必要となるリソースを確保するため、解放リソース管理テーブル121およびリソース管理テーブル122にリソース種別を登録する。システム制御部230内のリソース解放部103は、SQL実行環境100からリソース解放要求を受けた際に、解放リソース管理テーブル121およびリソース管理テーブル122を参照して解放するリソースを決定し、リソース管理テーブル122から決定したリソース種別を削除することでリソースの解放を行う。
図３は図１における本実施形態のSQL実行環境が、ユーザから要求されたルーチン呼出し用の実行モジュール130を実行し、プログラム実行環境101上でプログラム133を実行する処理手順を示すフローチャートである。ステップ300〜305はSQL実行環境100、ステップ310はリソース確保部102、ステップ320はリソース解放部103、ステップ330はプログラム実行環境101で行われる処理である。
【００１７】
まず、ステップ301において、SQL実行環境100は、ディクショナリ120を参照して、ルーチンとプログラムの関連情報を取得する。次に、ステップ302において、SQL実行環境100は、リソース確保部102にルーチン呼出しに伴うリソースの種別150をパラメタとして渡し、リソースの確保要求を行う。これに伴いステップ310において、リソース確保部102は、パラメタとして取得したリソース種別150を解放リソース管理テーブル121およびリソース管理テーブル122に登録する。この結果、解放リソース管理テーブル121およびリソース管理テーブル122は、340に示すように、リソース種別150として「定義R1」「プログラムP1」を保持した状態となる。
そして、ステップ303において、SQL実行環境100は、ステップ301で取得した関連情報から起動するプログラムを決定し、プログラム実行制御部にプログラム実行要求を行う。これに伴いステップ330において、プログラム実行環境101は指定されたプログラムを実行する。ステップ330で示すプログラム実行処理の詳細は、図４にて説明する。
【００１８】
プログラム実行処理が終了した後、ステップ304において、SQL実行環境100は、リソース解放部103にルーチン呼出しに伴うリソースの種別150をパラメタとして渡し、リソースの解放要求を行う。これに伴いステップ320において、リソース解放部103は、パラメタとして取得したリソース種別150を解放リソース管理テーブル121およびリソース管理テーブル122から削除する。この結果、解放リソース管理テーブル121およびリソース管理テーブル122は、341に示すように、リソース種別150が削除され何も保持していない状態となる。上記手順でSQL実行環境100でのプログラム呼出し処理が行われる。
【００１９】
図４は図３のステップ330の詳細として、図１における本実施形態のプログラム実行環境101が、プログラム133の実行処理を行い、Select文134およびCommit135を発行し、SQL実行環境100を呼び返す処理手順を示すフローチャートである。ステップ410〜413およびステップ430〜432はSQL実行環境100、ステップ420はリソース確保部102、ステップ440はリソース解放部103、ステップ400〜403はプログラム実行環境で行われる処理である。
【００２０】
まず、ステップ401において、プログラム実行環境101は、プログラムからSQLステートメントが発行されているかどうかを判定する。SQLステートメントが発行されている場合、ステップ410に進みSQL実行処理を開始する。ステップ411において、SQL実行環境100は、発行されたSQLステートメントを解析する。解析により、SQLステートメント実行に必要なリソースの種別151を決定する。ステップ412において、SQL実行環境100は、リソース確保部102に、上記のリソース種別151をパラメタとして渡し、リソースの確保要求を行う。これに伴い、ステップ420において、リソース確保部102は、パラメタとして取得したリソース種別151をリソース管理テーブル122に登録する。この結果、リソース管理テーブル122は、450に示すように、図３における状態340にリソース種別151として「表T1」「インデクスI1」が追加され、「定義R1」「プログラムP1」「表T1」「インデクスI1」の４つを保持した状態となる。以上ステップ411、412によりSQL実行環境100は、SQLステートメント実行処理を終了しプログラム実行環境101に返る。
【００２１】
ステップ401において、SQLステートメントが発行されていない場合、ステップ402に進む。ステップ402において、プログラム実行環境101は、プログラムからCommitが発行されているかどうかを判定する。Commitが発行されている場合、ステップ430に進みCommit処理を開始する。ステップ431において、SQL実行環境100は、リソース解放部103に、リソースの解放要求を行う。これに伴い、ステップ440において、リソース解放部103は、解放リソース管理テーブル121およびリソース管理テーブル122を参照して解放するリソース種別152を決定する。ここでは、状態450においてリソース管理テーブル122に保持されており、かつ、解放リソース管理テーブル121に保持されていないリソース「表T1」「インデクスI1」が、解放するリソース種別152として決定される。そして、リソース解放部103は、上記のリソース種別152をリソース管理テーブル122から削除する。この結果、リソース管理テーブル122は、451に示すように、状態450からリソース種別151として「表T1」「インデクスI1」を削除し、「定義R1」「プログラムP1」のみを保持した状態となる。以上ステップ431によりSQL実行環境100は、Commit処理を終了しプログラム実行環境101に返る。
【００２２】
ステップ402において、Commitが発行されていない場合、プログラム実行処理を終了する。上記手順でプログラム実行環境101でのプログラム実行処理は行われる。
以上示したフローチャートの処理は、図２で示したコンピュータシステム200におけるプログラムとして実行される。しかし、そのプログラムは図２で示したようにコンピュータシステム200に物理的に接続された外部記憶装置に格納されるものとは限定しない。コンピュータシステム200に物理的に接続されていない、ハードディスク装置、フロッピーディスク装置などのコンピュータシステム200で読み書きできる記憶媒体に格納してもよい。また、ネットワークを介して図２のコンピュータシステム200とは別のコンピュータシステムに接続された外部記憶装置に格納してもよい。
【００２３】
上述の実施の形態においては、解放不可であるデータベースリソースを解放リソース管理テーブル121として保持している。ここで、解放リソース管理テーブル121を使用しないで、リソース管理テーブル122に解放不可状態を示す情報を追加することで、解放不可であるデータベースリソースの情報としてもよい。
本発明は、コミットで述べたがロールバックでも同様に適用できる。
【００２４】
本発明によれば、プログラム実行中にトランザクション解決を行えるようにすることで、データベース処理を行うユーザにとっては、トランザクションを含むプログラムをそのままルーチン呼出し用プログラムとして使用できるため、可用性が向上する。
【００２５】
【発明の効果】
本発明によれば、他で使用できるデータベースリソースを好適に解放することが可能となる。
【図面の簡単な説明】
【図１】本発明の概念図である。
【図２】本実施形態のデータベース管理システムの機能ブロックおよびハードウェア構成を示す図である。
【図３】本実施形態のSQL実行環境が、プログラム実行環境上でプログラムを実行する処理手順を示すフローチャートである。
【図４】図３のステップ330の詳細として、本実施形態のプログラム実行環境が、プログラムの実行処理を行い、SQL実行環境を呼び返す処理手順を示すフローチャートである。
【符号の説明】
100…SQL実行環境、101…プログラム実行環境、102…リソース確保部、103…リソース解放部、104…プログラム実行制御部、120…ディクショナリ、121…リソース管理テーブル、122…解放リソース管理テーブル、220…データベース管理システム、230…システム制御部、231…データベースアクセス処理部、232…ディクショナリアクセス処理部、251…データベース
【図１】
0004238490.tif 000002
【図２】
0004238490.tif 000003
【図３】
0004238490.tif 000004
【図４】
0004238490.tif 000005