(57)【特許請求の範囲】
【請求項１】
アプリケーションにより使用されるデータベース管理システムにおけるトランザクションの並行制御方法であって、
データベース管理システムが、
第１のアプリケーションからトランザクション処理要求の指示を受けるとともに、トランザクション処理の識別子を含むトランザクション識別子情報と、前記データベース管理システムがトランザクション処理の実行中にデータを一時的に格納するメモリ領域であるデータベースキャッシュメモリのサイズを含むデータベース資源取得予定情報と、を受け取るステップと、
前記第１のアプリケーションと異なる第２のアプリケーションから指示されたトランザクション処理が実行中または中断中であるならば、前記第１のアプリケーションから入力されたトランザクション処理の優先度と、前記第２のアプリケーションから指示されたトランザクション処理の優先度とを比較するステップと、
前記比較の結果、前記第１のアプリケーションから指示されたトランザクション処理の優先度が、前記第２のアプリケーションから指示されたトランザクション処理の優先度よりも高い場合、前記第１のアプリケーションから指示されたトランザクション処理と実行中または中断中のトランザクション処理との間で、トランザクション処理の実行中に取得するデータベースオブジェクトの共有ロックおよび排他ロックの獲得要求、前記データベース資源取得予定情報に設定されたサイズの前記データベースキャッシュメモリの獲得要求、ならびに、トランザクション処理中にデータの書き込み及び読み出しを行うデータベースが格納されたＩ／Ｏデバイスの使用権の獲得要求のうち、いずれかの獲得要求の競合が発生するか否かを判定するステップと、
前記競合が発生するか否かの判定結果に基づいて、中断又は中止するトランザクション処理を決定するステップと、
前記中断または中止する対象のトランザクション処理の中断または中止がそれぞれ完了した後、前記データベース資源取得予定情報に設定されたサイズのデータベースキャッシュメモリ、リソースに対する共有ロック及び排他ロック、及びＩ／Ｏデバイスの使用権の取得を行い、前記第１のアプリケーションから指示されたトランザクション処理を実行するステップと、
前記第１のアプリケーションから指示されたトランザクション処理の実行が完了した後、中断しているトランザクション処理の実行を再開するステップと
を含むことを特徴とするトランザクション並行制御方法。
【請求項２】
請求項１に記載のトランザクション並行制御方法であって、
前記データベース管理システムは、前記実行中または中断中のトランザクション処理が取得している前記データベースキャッシュメモリのサイズを保持するデータ構造を有し、
前記データベース管理システムは、前記データベースキャッシュメモリの獲得要求の競合を判定するステップにおいて、前記データベース管理システムが使用できる前記データベースキャッシュメモリの総容量から前記実行中および中断中のトランザクション処理が取得中の前記データベースキャッシュメモリの合計サイズを引いた値が、前記データベース資源取得予定情報に含まれる前記データベースキャッシュメモリの所要量よりも少ない場合に前記データベースキャッシュメモリの競合が発生したと判定し、
前記データベース管理システムは、前記中止するトランザクション処理を決定するステップにおいて、前記判定により、前記データベースキャッシュメモリの競合が発生した場合、前記データベース管理システムが使用できる前記データベースキャッシュメモリの総容量から、前記実行中または中断中のトランザクション処理が取得中の前記データベースキャッシュメモリの合計サイズを引いて、中止対象のトランザクション処理が取得中の前記データベースキャッシュメモリの合計サイズを足した値が、前記データベース資源取得予定情報に含まれる前記データベースキャッシュメモリの所要量と同じかもしくは大きくなるよう、実行中または中断中で、かつ、前記優先度定義情報に含まれる優先度よりも低い優先度のトランザクション処理のなかから、優先度が低い順に最小個のトランザクション処理を選択することにより、中止対象のトランザクション処理と決定すること
を特徴とするトランザクション並行制御方法。
【請求項３】
請求項１に記載のトランザクション並行制御方法であって、
前記データベース管理システムは、前記実行中または中断中のトランザクション処理が共有ロックおよび排他ロックを取得しているデータベースオブジェクトの一覧を保持するデータ構造と、
トランザクション処理の実行中に共有ロックおよび排他ロックを取得したデータベースオブジェクトを、トランザクション処理の識別子に対応付けて保持するデータ構造であるトランザクションプロファイル情報を有し、
前記データベース管理システムは、前記排他の獲得要求の競合を判定するステップにおいて、前記第１のアプリケーションから要求されたトランザクション処理が共有ロックまたは排他ロックを取得する対象のデータベースオブジェクトであるか否かを判断し、前記第１のアプリケーションから要求されたトランザクション処理が共有ロックを取得するデータベースオブジェクトに対して、前記実行中または中断中のトランザクション処理が排他ロックを取得している場合、または、前記第１のアプリケーションから要求されたトランザクション処理が排他ロックを取得するデータベースオブジェクトに対して、前記実行中または中断中のトランザクション処理が共有ロックもしくは排他ロックを取得している場合に、排他競合が発生したと判定し、
前記データベース管理システムは、前記中止するトランザクション処理を決定するステップにおいて、前記判定により、排他競合が発生した場合、実行中または中断中で、かつ、優先度定義情報に含まれる優先度よりも低い優先度のトランザクション処理のうち、前記第１のアプリケーションから要求されたトランザクション処理が共有ロックを取得するデータベースオブジェクトに対して排他ロックを取得中のトランザクション処理と、前記第１のアプリケーションから要求されたトランザクション処理が排他ロックを取得するデータベースオブジェクトに対して共有ロックまたは排他ロックを取得中のトランザクション処理を、中止対象のトランザクション処理と決定すること
を特徴とするトランザクション並行制御方法。
【請求項４】
請求項１に記載のトランザクション並行制御方法であって、
前記データベース管理システムは、前記第１のアプリケーションから要求されたトランザクション処理、実行中のトランザクション処理、および、中断中のトランザクション処理が使用する対象のＩ／Ｏデバイスの一覧を保持するデータ構造を有し、
前記データベース管理システムは、前記データベース資源の競合を判定するステップにおいて、前記第１のアプリケーションから要求されたトランザクション処理が使用するＩ／Ｏデバイスを、実行中または中断中のトランザクション処理が使用中の場合、Ｉ／Ｏデバイス使用権の競合が発生したと判定し、
前記データベース管理システムは、前記Ｉ／Ｏデバイス使用権の獲得要求の競合を判定するステップにおいて、前記判定により、Ｉ／Ｏデバイス使用権の競合が発生した場合、実行中および中断中で、かつ、優先度定義情報に含まれる優先度よりも低い優先度のトランザクション処理のうち、前記第１のアプリケーションから要求されたトランザクション処理が使用するＩ／Ｏデバイスを使用中のトランザクション処理を、中断対象のトランザクション処理と決定すること
を特徴とするトランザクション並行制御方法。
【請求項５】
請求項１に記載のトランザクション並行制御方法であって、
前記データベース管理システムは、
前記第１のアプリケーションからトランザクション処理要求の指示を受けるとともに、トランザクション処理を実行するデータベースタスクを生成する目的で使用可能なメモリ領域が存在するか否かを表す利用可能メモリ領域情報を受け取ること
を特徴とするトランザクション並行制御方法。
【請求項６】
請求項５に記載のトランザクション並行制御方法であって、
前記利用可能メモリ領域情報が、データベースタスクを生成する目的で使用可能なメモリ領域が存在することを表す設定を含む場合、
前記データベース管理システムが、
前記中断または中止する対象のトランザクション処理の中断と中止がそれぞれ完了した後、前記第１のアプリケーションから指示されたトランザクション処理を、トランザクション処理を実行するデータベースタスクに割り当てることができるか否かを確認するステップと、
前記確認の結果、トランザクション処理をデータベースタスクに割り当てることができる場合、前記第１のアプリケーションから指示されたトランザクション処理を実行するステップと、
前記確認の結果、トランザクション処理をデータベースタスクに割り当てることができない場合、前記利用可能メモリ領域情報に含まれるメモリ領域のアドレスにトランザクション処理を実行するデータベースタスクを生成し、前記第１のアプリケーションから指示されたトランザクション処理を実行するステップと
をさらに含むことを特徴とするトランザクション並行制御方法。
【請求項７】
請求項５に記載のトランザクション並行制御方法であって、
前記利用可能メモリ領域情報が、データベースタスクを生成する目的で使用可能なメモリ領域が存在しないことを表す設定を含む場合、
前記データベース管理システムが、
前記中断または中止する対象のトランザクション処理の中断と中止とがそれぞれ完了した後、前記第１のアプリケーションから指示されたトランザクション処理を、トランザクション処理を実行するデータベースタスクに割り当てることができるか否かを確認するステップと、
前記確認の結果、トランザクション処理をデータベースタスクに割り当てることができる場合、前記第１のアプリケーションから指示されたトランザクション処理を実行するステップと、
前記確認の結果、トランザクション処理をデータベースタスクに割り当てることができない場合、中断中のトランザクション処理に割り当てられているデータベースタスクのレジスタ値のスナップショットであるレジスタ情報、実行時スタックを保持するメモリ領域のスナップショットである実行時スタック情報、および、大域変数を保持するメモリ領域のスナップショットである大域変数領域情報からなるコンテキストをコンテキスト退避領域に退避するステップと、
前記コンテキストの退避を行ったデータベースタスクに、前記第１のアプリケーションから指示されたトランザクション処理を割り当てて、前記第１のアプリケーションから指示されたトランザクション処理を実行するステップと、
前記第１のアプリケーションから指示されたトランザクション処理の実行が完了した後、前記コンテキスト退避領域から前記コンテキストを復旧するステップと
をさらに含むこと特徴とする請求項７に記載のトランザクション並行制御方法。
【請求項８】
データベース管理システムであって、
第１のアプリケーションからトランザクション処理要求の指示を受けるとともに、トランザクション処理の識別子を含むトランザクション識別子情報と、前記データベース管理システムがトランザクション処理の実行中にデータを一時的に格納するメモリ領域であるデータベースキャッシュメモリのサイズを含むデータベース資源取得予定情報と、を受け取り、第１のアプリケーションと異なる第２のアプリケーションから指示されたトランザクション処理が実行中または中断中であるならば、前記第１のアプリケーションから入力されたトランザクション処理の優先度と、前記第２のアプリケーションから指示されたトランザクション処理の優先度とを比較するトランザクション処理要求受付部と、
前記比較の結果、前記第１のアプリケーションから指示されたトランザクション処理の優先度が、前記第２のアプリケーションから指示されたトランザクション処理の優先度よりも高い場合、前記第１のアプリケーションから指示されたトランザクション処理と実行中または中断中のトランザクション処理との間で、トランザクション処理の実行中に取得するデータベースオブジェクトの共有ロックおよび排他ロックの獲得要求、前記データベース資源取得予定情報に設定されたサイズの前記データベースキャッシュメモリの獲得要求、ならびに、トランザクション処理中にデータの書き込み及び読み出しを行うデータベースが格納されたＩ／Ｏデバイスの使用権の獲得要求のうち、いずれかの獲得要求の競合が発生するか否かを判定し、前記競合が発生するか否かの判定結果に基づいて、中断又は中止するトランザクション処理を決定するデータベース資源競合制御部と、
前記中断または中止する対象のトランザクション処理の中断または中止がそれぞれ完了した後、前記データベース資源取得予定情報に設定されたサイズのデータベースキャッシュメモリ、リソースに対する共有ロック及び排他ロック、及びＩ／Ｏデバイスの使用権の取得を行い、前記第１のアプリケーションから指示されたトランザクション処理を実行し、前記第１のアプリケーションから指示されたトランザクション処理の実行が完了した後、中断しているトランザクション処理の実行を再開するデータベースタスク制御処理部と
を備えることを特徴とするデータベース管理システム。
【請求項９】
請求項８に記載のデータベース管理システムであって、
前記実行中または中断中のトランザクション処理が取得している前記データベースキャッシュメモリのサイズを保持するデータ構造を有し、
前記データベース資源競合制御部は、前記データベースキャッシュメモリの獲得要求の競合を判定するにあたり、前記データベース管理システムが使用できる前記データベースキャッシュメモリの総容量から前記実行中および中断中のトランザクション処理が取得中の前記データベースキャッシュメモリの合計サイズを引いた値が、前記データベース資源取得予定情報に含まれる前記データベースキャッシュメモリの所要量よりも少ない場合に前記データベースキャッシュメモリの競合が発生したと判定し、
データベース資源競合制御部は、前記中止するトランザクション処理を決定するにあたり、前記判定により、前記データベースキャッシュメモリの競合が発生した場合、前記データベース管理システムが使用できる前記データベースキャッシュメモリの総容量から、前記実行中および中断中のトランザクション処理が取得中の前記データベースキャッシュメモリの合計サイズを引いて、中止対象のトランザクション処理が取得中の前記データベースキャッシュメモリの合計サイズを足した値が、前記データベース資源取得予定情報に含まれる前記データベースキャッシュメモリの所要量と同じかもしくは大きくなるよう、実行中または中断中で、かつ、前記優先度定義情報に含まれる優先度よりも低い優先度のトランザクション処理のなかから、優先度が低い順に最小個のトランザクション処理を選択することにより、中止対象のトランザクション処理と決定すること
を特徴とするデータベース管理システム。
【請求項１０】
請求項８に記載のデータベース管理システムであって、
前記実行中または中断中のトランザクション処理が共有ロックおよび排他ロックを取得しているデータベースオブジェクトの一覧を保持するデータ構造と、
トランザクション処理の実行中に共有ロックおよび排他ロックを取得したデータベースオブジェクトを、トランザクション処理の識別子に対応付けて保持するデータ構造であるトランザクションプロファイル情報を有し、
前記データベース資源競合制御部は、前記排他の獲得要求の競合を判定するにあたり、前記第１のアプリケーションから要求されたトランザクション処理が共有ロックまたは排他ロックを取得する対象のデータベースオブジェクトであるか否かを判断し、前記第１のアプリケーションから要求されたトランザクション処理が共有ロックを取得するデータベースオブジェクトに対して、前記実行中または中断中のトランザクション処理が排他ロックを取得している場合、または、前記第１のアプリケーションから要求されたトランザクション処理が排他ロックを取得するデータベースオブジェクトに対して、前記実行中または中断中のトランザクション処理が共有ロックもしくは排他ロックを取得している場合に、排他競合が発生したと判定し、
前記データベース資源競合制御部は、前記中止するトランザクション処理を決定するにあたり、前記判定により、排他競合が発生した場合、実行中または中断中で、かつ、優先度定義情報に含まれる優先度よりも低い優先度のトランザクション処理のうち、前記第１のアプリケーションから要求されたトランザクション処理が共有ロックを取得するデータベースオブジェクトに対して排他ロックを取得中のトランザクション処理と、前記第１のアプリケーションから要求されたトランザクション処理が排他ロックを取得するデータベースオブジェクトに対して共有ロックまたは排他ロックを取得中のトランザクション処理を、中止対象のトランザクション処理と決定すること
を特徴とするデータベース管理システム。
【請求項１１】
請求項８に記載のデータベース管理システムであって、
前記第１のアプリケーションから要求されたトランザクション処理、実行中のトランザクション処理、および、中断中のトランザクション処理が使用する対象のＩ／Ｏデバイスの一覧を保持するデータ構造を有し、
前記データベース資源競合制御部は、前記Ｉ／Ｏデバイス使用権の獲得要求の競合を判定するにあたり、前記第１のアプリケーションから要求されたトランザクション処理が使用するＩ／Ｏデバイスを、実行中または中断中のトランザクション処理が使用中の場合、Ｉ／Ｏデバイス使用権の競合が発生したと判定し、
前記データベース資源競合制御部は、前記中止するトランザクション処理を決定するにあたり、前記判定により、Ｉ／Ｏデバイス使用権の競合が発生した場合、実行中および中断中で、かつ、優先度定義情報に含まれる優先度よりも低い優先度のトランザクション処理のうち、前記第１のアプリケーションから要求されたトランザクション処理が使用するＩ／Ｏデバイスを使用中のトランザクション処理を、中断対象のトランザクション処理と決定すること
を特徴とするデータベース管理システム。
【請求項１２】
請求項８に記載のデータベース管理システムであって、
前記第１のアプリケーションからトランザクション処理要求の指示を受けるとともに、トランザクション処理を実行するデータベースタスクを生成する目的で使用可能なメモリ領域が存在するか否かを表す利用可能メモリ領域情報を受け取ること
を特徴とするデータベース管理システム。
【請求項１３】
請求項１２に記載のデータベース管理システムであって、
前記利用可能メモリ領域情報が、データベースタスクを生成する目的で使用可能なメモリ領域が存在することを表す設定を含む場合、
前記中断または中止する対象のトランザクション処理の中断と中止がそれぞれ完了した後、前記第１のアプリケーションから指示されたトランザクション処理を、トランザクション処理を実行するデータベースタスクに割り当てることができるか否かを確認し、
前記確認の結果、トランザクション処理をデータベースタスクに割り当てることができる場合、前記第１のアプリケーションから指示されたトランザクション処理を実行し、
前記確認の結果、トランザクション処理をデータベースタスクに割り当てることができない場合、前記利用可能メモリ領域情報に含まれるメモリ領域のアドレスにトランザクション処理を実行するデータベースタスクを生成し、前記第１のアプリケーションから指示されたトランザクション処理を実行すること
を特徴とするデータベース管理システム。
【請求項１４】
請求項１２に記載のデータベース管理システムであって、
前記利用可能メモリ領域情報が、データベースタスクを生成する目的で使用可能なメモリ領域が存在しないことを表す設定を含む場合、
前記中断または中止する対象のトランザクション処理の中断と中止とがそれぞれ完了した後、前記第１のアプリケーションから指示されたトランザクション処理を、トランザクション処理を実行するデータベースタスクに割り当てることができるか否かを確認し、
前記確認の結果、トランザクション処理をデータベースタスクに割り当てることができる場合、前記第１のアプリケーションから指示されたトランザクション処理を実行し、
前記確認の結果、トランザクション処理をデータベースタスクに割り当てることができない場合、中断中のトランザクション処理に割り当てられているデータベースタスクのレジスタ値のスナップショットであるレジスタ情報、実行時スタックを保持するメモリ領域のスナップショットである実行時スタック情報、および、大域変数を保持するメモリ領域のスナップショットである大域変数領域情報からなるコンテキストをコンテキスト退避領域に退避し、
前記コンテキストの退避を行ったデータベースタスクに、前記第１のアプリケーションから指示されたトランザクション処理を割り当てて、前記第１のアプリケーションから指示されたトランザクション処理を実行し、
前記第１のアプリケーションから指示されたトランザクション処理の実行が完了した後、前記コンテキスト退避領域から前記コンテキストを復旧すること
を特徴とするデータベース管理システム。
【請求項１５】
情報処理装置に、
第１のアプリケーションからトランザクション処理要求の指示を受けるとともに、トランザクション処理の識別子を含むトランザクション識別子情報と、前記データベース管理システムがトランザクション処理の実行中にデータを一時的に格納するメモリ領域であるデータベースキャッシュメモリのサイズを含むデータベース資源取得予定情報と、を受け取る機能と、
前記第１のアプリケーションと異なる第２のアプリケーションから指示されたトランザクション処理が実行中または中断中であるならば、前記第１のアプリケーションから入力されたトランザクション処理の優先度と、前記第２のアプリケーションから指示されたトランザクション処理の優先度とを比較する機能と、
前記比較の結果、前記第１のアプリケーションから指示されたトランザクション処理の優先度が、前記第２のアプリケーションから指示されたトランザクション処理の優先度よりも高い場合、前記第１のアプリケーションから指示されたトランザクション処理と実行中または中断中のトランザクション処理との間で、トランザクション処理の実行中に取得するデータベースオブジェクトの共有ロックおよび排他ロックの獲得要求、前記データベース資源取得予定情報に設定されたサイズの前記データベースキャッシュメモリの獲得要求、ならびに、トランザクション処理中にデータの書き込み及び読み出しを行うデータベースが格納されたＩ／Ｏデバイスの使用権の獲得要求のうち、いずれかの獲得要求の競合が発生するか否かを判定する機能と、
前記競合が発生するか否かの判定結果に基づいて、中断又は中止するトランザクション処理を決定する機能と、
前記中断または中止する対象のトランザクション処理の中断または中止がそれぞれ完了した後、前記データベース資源取得予定情報に設定されたサイズのデータベースキャッシュメモリ、リソースに対する共有ロック及び排他ロック、及びＩ／Ｏデバイスの使用権の取得を行い、前記第１のアプリケーションから指示されたトランザクション処理を実行する機能と、
前記第１のアプリケーションから指示されたトランザクション処理の実行が完了した後、中断しているトランザクション処理の実行を再開する機能と
を実現するためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、トランザクション並行制御方法、データベース管理システム、およびプログラムに関し、優先度付きのトランザクション処理が発生した場合にデータの消失を防ぐための技術に関する。
【背景技術】
【０００２】
一般に携帯電話機、カーナビゲーションシステム、デジタル家電などの情報処理装置のアプリケーションに用いられるデータベース管理システム（ＤＢＭＳ（Database Management System））は、複数のアプリケーションから要求されたトランザクションを並行処理することができる。例えば携帯電話機は、音楽アプリケーションが要求する音楽コンテンツの追加や再生などのトランザクションの処理中に電話帳の検索などの電話帳アプリケーションが要求するトランザクションを並行して処理する。またカーナビゲーションシステムは、ＧＰＳアプリケーション（GPS : Global Positioning System）が要求する緯度経度データの地図表示などのトランザクションの処理中に走行データの記録など車両管理アプリケーションが要求するトランザクションを並行して処理する。
【０００３】
ここでトランザクション処理とは、順序付けられた１つ以上の問い合わせに対応する処理を逐次実行することである。一般的なリレーショナルデータベース管理システム（ＲＤＢＭＳ：Relational Database Management System）では、上記の問い合わせはＳＱＬ（Structured Query Language）を用いて行われる。例えば、データベースからの特定の条件に一致するデータの検索、データベースへのデータを追加（挿入）、特定の条件に一致するデータの削除、データの更新、テーブルの生成等である。
【０００４】
トランザクション処理は、その完了時において、全ての問い合わせ処理が実行されたか、または、全ての問い合わせ処理が実行されなかったか、のどちらかの結果となることが保証されている（トランザクションの原子性）。またトランザクション処理は、データベースの内容がアプリケーションから見て正当な状態から処理を開始した場合には、その完了時にアプリケーションから見てデータベースの内容が正当な状態であることが保証されている（トランザクションの一貫性）。なお、トランザクションの一貫性を保証する手段として、共有ロック（参照ロック）と排他ロックによる排他制御がある。この排他制御のために、ＤＢＭＳは、共有ロックと排他ロックの状態を管理するデータ構造である排他資源管理情報を保持する。非特許文献１には、トランザクションの原始性、トランザクションの一貫性、共有ロック、排他ロック、および排他資源管理情報（同文献中の"lock manager data structure"）等が開示されている。
【０００５】
前述した並行処理の仕組みには、ＴＳＳ方式（TSS : Time Sharing System）（例えば非特許文献２を参照）、優先度付きプリエンプティブ方式等がある。携帯電話機、カーナビゲーションシステム、デジタル家電等の情報処理装置にはスループットの向上よりも応答時間の短縮が求められる。このため、通常は優先度付きプリエンプティブ方式が採用される。
【０００６】
優先度付きプリエンプティブ方式では、各トランザクション処理に実行順序を表す値である優先度を付与した上で、次のルールに従って処理が行われる。  
（ａ）その時点で最も優先度の高いトランザクション処理にＣＰＵ使用権を与える。  
（ｂ）同じ優先度のトランザクション処理は、先に処理要求されたトランザクション処理から順にＣＰＵ使用権を与える。  
（ｃ）より高い優先度のトランザクション処理が発生した場合は、より低い優先度のトランザクション処理がＣＰＵを使用して処理実行中であっても、より高い優先度のトランザクション処理にＣＰＵ使用権を切り替える。
【非特許文献１】Gray,J. and Reuter,A. : “Transaction Processing : Concepts and Techniques", Morgan Kaufmann Publishers, 1993.
【非特許文献２】Tanenbaum,A,S. and Woodhull,A. : "Operating Systems : Design and Implementation 2nd Edition", Chapter.2 "Process", Prentice Hall, 1997.
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ところで、優先度付きプリエンプティブ方式によるトランザクションの並行制御において、緊急性や重要性が高いトランザクション処理に高い優先度を付与する方法がある。この方法では、トランザクション処理の実行中により優先度の高いトランザクション処理の要求が発生した場合、優先度の低いトランザクション処理が取得している資源を解放し、優先度の高いトランザクション処理が必要な資源を取得できるようにし、より高い優先度のトランザクション処理にＣＰＵ使用権を切り替える。これによれば緊急性や重要性の高い処理の応答時間を短くすることができる。例えば、携帯電話機では、通話アプリケーションが要求するトランザクション処理（音声着信の表示など）の方が音楽アプリケーションや電話帳アプリケーションが要求するトランザクション処理よりも高い優先度が付与され、音楽アプリケーションが要求したトランザクション処理の実行中に通話（音声着信）が起こった場合でも、通話アプリケーションが要求するトランザクション処理が実行される。これによれば音声着信への応答時間を短くすることができる。
【０００８】
しかしこの方法には次のような問題がある。すなわち、例えば音声着信の処理を行う通話アプリケーションと電話帳の参照や更新を行う電話帳アプリケーションを有する携帯電話において、電話帳アプリケーションが電話帳のデータを更新するトランザクション処理の実行中に音声着信が発生した場合には、電話帳アプリケーションが取得している資源を通話アプリケーションから要求されたトランザクション処理で使用できるようにするために電話帳アプリケーションのトランザクション処理を中止（ロールバック）する必要があり、これにより更新中の電話帳のデータが消失してしまうこととなる。
【０００９】
本発明はこのような課題に鑑みてなされたもので、優先度付きのトランザクション処理が発生した場合にデータの消失を防ぐことが可能なトランザクション並行制御方法、データベース管理システム、およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するための本発明のうちの一つは、アプリケーションにより使用されるデータベース管理システムにおけるトランザクションの並行制御方法であって、
データベース管理システムが、
第１のアプリケーションからトランザクション処理要求の指示を受けるとともに、トランザクション処理の識別子を含むトランザクション識別子情報と、前記データベース管理システムがトランザクション処理の実行中にデータを一時的に格納するメモリ領域であるデータベースキャッシュメモリのサイズを含むデータベース資源取得予定情報と、を受け取るステップと、
前記第１のアプリケーションと異なる第２のアプリケーションから指示されたトランザクション処理が実行中または中断中であるならば、前記第１のアプリケーションから入力されたトランザクション処理の優先度と、前記第２のアプリケーションから指示されたトランザクション処理の優先度とを比較するステップと、
前記比較の結果、前記第１のアプリケーションから指示されたトランザクション処理の優先度が、前記第２のアプリケーションから指示されたトランザクション処理の優先度よりも高い場合、前記第１のアプリケーションから指示されたトランザクション処理と実行中または中断中のトランザクション処理との間で、トランザクション処理の実行中に取得するデータベースオブジェクトの共有ロックおよび排他ロックの獲得要求、前記データベース資源取得予定情報に設定されたサイズの前記データベースキャッシュメモリの獲得要求、ならびに、トランザクション処理中にデータの書き込み及び読み出しを行うデータベースが格納されたＩ／Ｏデバイスの使用権の獲得要求のうち、いずれかの獲得要求の競合が発生するか否かを判定するステップと、
前記競合が発生するか否かの判定結果に基づいて、中断又は中止するトランザクション処理を決定するステップと、
前記中断または中止する対象のトランザクション処理の中断または中止がそれぞれ完了した後、前記データベース資源取得予定情報に設定されたサイズのデータベースキャッシュメモリ、リソースに対する共有ロック及び排他ロック、及びＩ／Ｏデバイスの使用権の取得を行い、前記第１のアプリケーションから指示されたトランザクション処理を実行するステップと、
前記第１のアプリケーションから指示されたトランザクション処理の実行が完了した後、中断しているトランザクション処理の実行を再開するステップと
を含むこととする。
【００１１】
その他、本願が開示する課題、およびその解決手段は、発明を実施するための最良の形態の欄、および図面により明らかとなる。
【発明の効果】
【００１２】
本発明によれば、優先度付きのトランザクション処理が発生した場合にデータの消失を防ぐことができる。
【発明を実施するための最良の形態】
【００１３】
以下、図面を参照しつつ実施形態について説明する。図１は実施形態として説明するトランザクション並行制御方法の概要を説明する図である。同図に示すように、ＤＢＭＳ１００のトランザクション処理要求受付部１０７は、アプリケーション１０２（第１のアプリケーション）からＤＢＭＳ１００に対するトランザクション処理の開始要求であるトランザクション処理要求を受け取る。なお、トランザクション処理要求は、例えばＤＢＭＳ１００が提供するトランザクション処理を開始させるコマンドや関数等のインタフェースを介して実行される。
【００１４】
トランザクション処理要求受付部１０７は、トランザクション処理要求とともにトランザクション識別子情報１０３、優先度定義情報１０４、データベース資源取得予定情報１０５、および利用可能メモリ領域情報１０６を受け取る。トランザクション識別子情報１０３は、アプリケーション１０２から要求されたトランザクション処理をＤＢＭＳ１００内で一意に特定する情報である。優先度定義情報１０４は、アプリケーション１０２から要求されたトランザクション処理の優先度を記述した情報である。データベース資源取得予定情報１０５は、アプリケーション１０２から要求されたトランザクション処理の実行中に取得するデータベース資源の種類と値（所要量）を記述した情報である。利用可能メモリ領域情報１０６は、アプリケーション１０２から要求されたトランザクション処理を実行するために使用可能な、共有ヒープメモリ１１２内の一連のメモリ領域の先頭アドレスとサイズを記述した情報である。
【００１５】
ＤＢＭＳ１００は、上記トランザクション処理要求を受け取った際、別のアプリケーション１０１（第２のアプリケーション）から要求されたトランザクション処理が実行中または中断中であった場合、受け付けた優先度定義情報１０４に記述されている、アプリケーション１０２から要求されたトランザクション処理の優先度と、アプリケーション１０１から要求されたトランザクション処理の優先度とを比較する。比較の結果、アプリケーション１０２から要求されたトランザクション処理の優先度の方が高い場合には、ＤＢＭＳ１００のデータベース資源競合制御部１０８が、実行中および中断中のトランザクション処理が取得中のデータベース資源の種類および値と、アプリケーション１０２から要求されたトランザクション処理の実行時に取得するデータベース資源の種類および値に基づき、アプリケーション１０２から要求されたトランザクション処理とＤＢＭＳ１００において実行中および中断中のトランザクション処理との間のデータベース資源の競合を判定することにより、中断および中止するトランザクション処理を決定する。
【００１６】
なお、データベース資源の競合とは、ＤＢＭＳ１００の複数の異なるトランザクション処理が同じデータベース資源の取得を要求することであり、一方のトランザクション処理がデータベース資源を取得しているため、別のトランザクション処理がデータベース資源を取得することができない状態をいう。
【００１７】
図１に示すデータベースタスク制御部１０９は、データベースタスク１１１に対し、トランザクション処理の中断および中止を指示する。データベースタスク１１１は指定されたトランザクション処理の中断および中止を完了する。トランザクション処理を割り当て可能なデータベースタスク１１１が存在する場合、データベースタスク制御部１０９はアプリケーション１０２から要求されたトランザクション処理の実行を開始する。トランザクション処理を割り当て可能なデータベースタスク１１１が存在しない場合、データベースタスク制御部１０９は利用可能メモリ領域情報１０６に共有ヒープメモリ１１２内のメモリ領域に関する記述があるか否かを確認する。記述がある場合、データベースタスク制御部１０９は記述されたメモリ領域にデータベースタスクを一時的に生成し、生成されたデータベースタスクがアプリケーション１０２から要求されたトランザクション処理の実行を開始する。記述がない場合、データベースタスク制御部１０９は中断中のトランザクション処理に割り当てられているデータベースタスク１１１のレジスタ情報、実行時スタック情報、および大域変数領域情報からなるコンテキスト１１７をコンテキスト退避領域１１３に退避する。退避が完了した後、データベースタスク１１１はアプリケーション１０２から要求されたトランザクション処理の実行を開始する。アプリケーション１０２から要求されたトランザクション処理の実行が完了した後、データベースタスク１１１は中断中のトランザクション処理の実行を再開する。
【００１８】
前述のデータベース資源は、ＤＢＭＳ１００がトランザクション処理を実行する目的で使用するメモリ領域や、プログラム、ハードウェアデバイスなどの一般的な情報処理装置（計算機）のリソースであり、より具体的には、ＤＢＭＳ１００がトランザクション処理中にデータを一時的に格納するメモリ領域であるデータベースキャッシュメモリ、ＤＢＭＳ１００で複数のトランザクション処理を並行実行するために必要となるロック（共有ロックおよび排他ロック）を取得する対象となるデータベース１１６内のデータベースオブジェクトの排他、データベース１１６が存在するＩ／Ｏデバイスへのデータの書き込みと読み出しを行うためのＩ／Ｏデバイス使用権などがある。
【００１９】
データベースオブジェクトとは、データベース１１６に生成された各テーブルや、テーブルを構成する各行（row）などのデータベース１１６の構成要素である。データベースオブジェクトの排他とは、データベースオブジェクトをトランザクション処理で占有して使用するための権利（使用権）であり、共有ロックと排他ロックの２種類の排他が存在する。排他、共有ロック、および、排他ロックは、一般的なＤＢＭＳにおけるものと同じである。
【００２０】
ＤＢＭＳ１００が使用できるデータベースキャッシュメモリのサイズの総量はＤＢＭＳ１００の開始時に予め決められている（例えばＤＢＭＳ１００が使用できるデータベースキャッシュメモリのサイズの総量が２ＭＢｙｔｅと決められている場合には、ＤＢＭＳ１００で実行中および中断中のトランザクション処理が取得できるベースキャッシュメモリのサイズの合計値は２ＭＢｙｔｅを超えない）。  
Ｉ／Ｏデバイス使用権とは、Ｉ／Ｏデバイスを使用してデータの書き込みと読み出しを行うために取得することが必要な権利である。  
ＤＢＭＳ１００において、トランザクション処理が実行中とは、トランザクション処理に含まれる問い合わせ処理を逐次実行している状態であることをいう。実行中のトランザクション処理は、データベース資源を取得している。
【００２１】
ＤＢＭＳ１００において、トランザクション処理が中断中であるとは、トランザクション処理に含まれる問い合わせ処理の逐次実行を一時的に停止している状態であることをいう。中断中のトランザクション処理は、一部のデータベース資源を取得したままの状態であり、残りのデータベース資源は解放した状態である。中断中のトランザクション処理が取得したままのデータベース資源には、データベースキャッシュメモリやデータベースオブジェクトの排他などがある。中断中のトランザクション処理が解放するデータベース資源の一例としてＩ／Ｏデバイスがある。
【００２２】
中断中のトランザクション処理は、再開されるまで問い合わせ処理の逐次実行を停止する。トランザクション処理の再開とは、中断中のトランザクション処理に含まれる問い合わせ処理の逐次実行を、中断した時点のトランザクション処理の状態のままで開始することである。
【００２３】
トランザクション処理の中止とは、トランザクション処理に含まれる全ての問い合わせ処理が実行されなった状態に戻すことである。トランザクション処理の中止は、一般的なＤＢＭＳにおけるトランザクションのロールバック（rollback）と同様である。
【００２４】
図１に示すトランザクションプロファイル情報１１４は、アプリケーション１０２から要求されたトランザクション処理の内容を記述した情報である。トランザクション処理の内容には、トランザクション処理中にアクセスするテーブルの名称とトランザクション処理中に共有ロックまたは排他ロックを取得するデータベースオブジェクトの名称などが含まれる。また同図に示すデータベース構成情報１１５は、データベースの構成を記述した情報である。データベース１１６の構成には、データベース１１６が生成されているストレージデバイスの名称とデータベース内に生成されているテーブルの名称などが含まれる。  
トランザクションプロファイル情報１１４およびデータベース構成情報１１５は、トランザクション処理の実行中に取得する予定のデータベース資源を決定する為に使用する。
【００２５】
なお、テーブルの名称、データベースオブジェクトの名称、および、ストレージデバイスの名称は、ＤＢＭＳ１００内でそれぞれ、テーブル、データベースオブジェクト、ストレージデバイスを一意に識別できるものである。
【００２６】
データベースタスク１１１のレジスタ情報とは、データベースタスク１１１の動作中におけるレジスタの値のスナップショットである。レジスタは、情報処理装置（コンピュータ）が有するＣＰＵ（Central Processing Unit）の構成要素であり、ＣＰＵが処理中の計算の結果やＣＰＵの状態を表す情報を一時的に格納するメモリである。  
データベースタスク１１１の実行時スタック情報とは、データベースタスク１１１の動作中における実行時スタックのスナップショットである。実行時スタックとは、プログラム実行中の関数呼び出しの前後関係（順番）や、関数呼び出しのパラメータおよび戻り値などを記憶するメモリ領域である。  
データベースタスク１１１の大域変数領域情報とは、データベースタスク１１１の動作中における大域変数領域のスナップショットである。大域変数領域とは、プログラム実行中の大域変数の値を記憶するメモリ領域である。
【００２７】
トランザクション処理の優先度とは、ＤＢＭＳ１００において同時に複数のトランザクション処理の実行を要求された場合に、トランザクション処理を実行する順番を決めるための値である。全てのトランザクション処理は、必ず１つの優先度を持つ。優先度の値は優先度同士で比較できる値であれば、数値や文字列などの表現形式やデータ構造は問わない。  
トランザクション処理の優先度の値の範囲は、ＤＢＭＳ１００において予め決められている（例えば１から２００までの間など）。トランザクション処理の優先度として取り得る値の総数は有限個である（例えば１から２００までの間の整数値２００個など）。
【００２８】
トランザクション処理の優先度は、以下の性質を持つ。  
（ａ）同じ優先度のトランザクション処理は、先にトランザクション処理要求を受け付けた方から実行する。  
（ｂ）より高い優先度のトランザクション処理の実行を要求された場合は、より低い優先度のトランザクション処理の実行中であっても、より高い優先度のトランザクション処理の実行に切り替える。
【００２９】
なお、トランザクション処理の優先度の値は、トランザクション処理を要求するアプリケーション毎に固定されていてもよいし、アプリケーションの状態に基づいて、アプリケーションが優先度の値を変更して、ＤＢＭＳ１００に処理を要求してもよい。またＤＢＭＳ１００がトランザクション処理を実行中に状態に基づいて優先度の値を変更してもよい。その場合、トランザクション処理の優先度の値は、トランザクション処理を要求したアプリケーションからの指示を受けて、ＤＢＭＳ１００が行うものとする。
【００３０】
《システム構成》
図２に本実施形態のトランザクション並行制御方法の実施に用いられる情報処理装置２２６（コンピュータ）の一例を示している。同図に示すように、この情報処理装置２２６は、ＣＰＵ２００（CPU : Central Processing Unit、中央処理装置）、入力デバイス２０１、ディスプレイデバイス２０２、通信制御装置２０３、主記憶装置２０６、ストレージデバイス２０７、およびシステムバス２０５を備えている。なお、情報処理装置２２６の具体例として、携帯電話機、カーナビゲーションシステム、デジタル家電などがある。
【００３１】
ＣＰＵ２００は、本実施形態で使用する各プログラムを実行する。入力デバイス２０１は、キーボード、タッチパッド、タッチパネルなどのデバイスであり、アプリケーションプログラム２１１やデータベース管理システムプログラム２１２の実行などを指示するコマンドなどを入力する目的で使用する。入力デバイス２０１のハードウェアや構成は問わない。ディスプレイデバイス２０２は、例えばアプリケーションプログラム２１１やデータベース管理システムプログラム２１２の実行結果などを表示する目的で使用する。
【００３２】
通信制御装置２０３は、ネットワーク２０４を介した通信を行う目的で使用する。ネットワーク２０４は、通信制御装置２０３を介した通信を行うことが可能ならば、有線ネットワークや無線ネットワークなどのネットワークの物理的な媒体、スター型ネットワークやＰ２Ｐ（Peer-to-Peer）型ネットワークなどのネットワークの構成、およびＳＣＳＩ（Small Computer System Interface）、Ｂｌｕｅｔｏｏｔｈ、ＴＣＰ／ＩＰ（Transmission Control Protocol/Internet Protocol）、ＣＳＭＡ／ＣＤ（Carrier Sense Multiple Access with Collision Detection）、ＧＳＭ（Global System for Mobile Communications）などのプロトコルは問わない。
【００３３】
主記憶装置２０６は、各種プログラムと一時的なデータ格納を行う。ストレージデバイス２０７は、磁気ディスク装置やフラッシュメモリデバイスなどの記憶デバイスであり、データベースやデータベースに関する情報を格納する目的で使用する。ストレージデバイス２０７のハードウェアや構成は問わない。  
主記憶装置２０６には、共有ヒープメモリ１１２、制御プログラム２０９、アプリケーションプログラム群２１０、データベース管理システムプログラム２１２、トランザクション識別子情報１０３、優先度定義情報１０４、データベース資源取得予定情報１０５、および利用可能メモリ領域情報１０６が、保持される。  
本実施形態で使用されるプログラムは、ネットワーク２０４から通信制御装置２０３を介して、主記憶装置２０６に設定される。
【００３４】
共有ヒープメモリ１１２は、本実施形態で使用する各プログラムの実行時に一時的に必要となるデータやプログラムを記憶する目的で使用する。  
制御プログラム２０９は、本実施形態で使用される各プログラムを実行するための基本的な機能を提供する。
【００３５】
アプリケーションプログラム群２１０は、１つ以上のアプリケーションプログラム２１１の集まりである。アプリケーションプログラム２１１は、データベース管理システムプログラム２１２が提供する機能を利用することによって、ユーザにサービスを提供する。また、アプリケーションプログラム２１１は、データベース管理システムプログラム２１２に対して、トランザクション識別子情報１０３、優先度定義情報１０４、データベース資源取得予定情報１０５、および利用可能メモリ領域情報１０６を入力し、トランザクション処理の実行を要求する。
【００３６】
データベース管理システムプログラム２１２は、トランザクション処理要求受付プログラム２１７、データベース資源競合制御プログラム２１８、データベースタスク制御プログラム２１９、データベースタスクプログラム２２１、データベース構成プログラム２２２、トランザクション処理要求キューリスト２１３、トランザクション状態管理情報２１４、および排他資源管理情報２２５を有する。データベース管理システムプログラム２１２は、アプリケーションプログラム２１１から、トランザクション識別子情報１０３、優先度定義情報１０４、データベース資源取得予定情報１０５、および利用可能メモリ領域情報１０６を受け取る機能を実現する。
【００３７】
またデータベース管理システムプログラム２１２は、その実行に際し、トランザクション処理を実行する目的で、トランザクション処理の実行中に必要なデータを一時的に格納するメモリ領域であるデータベースキャッシュメモリを使用する。データベース管理システムプログラム２１２が使用可能なデータベースキャッシュメモリのサイズは、データベース管理システムプログラム２１２の処理を開始時に予め決まっている。データベース管理システムプログラム２１２が使用可能なデータベースキャッシュメモリのサイズは、データベース管理システムプログラム２１２から参照できる。
【００３８】
トランザクション処理要求受付プログラム２１７は、図１に示したトランザクション処理要求受付部１０７を実現するプログラムである。トランザクション処理要求受付部１０７は、アプリケーションプログラム２１１から入力されたトランザクション識別子情報１０３、優先度定義情報１０４、データベース資源取得予定情報１０５、および利用可能メモリ領域情報１０６を受け取り、優先度定義情報１０４に記述された優先度の方がデータベース管理システムプログラム２１２で実行中または中断中のトランザクションの優先度よりも高い場合にデータベース資源競合制御部１０８に処理の開始を指示する。トランザクション処理要求受付部１０７によって行われる処理の詳細については図９で説明する。
【００３９】
データベース資源競合制御プログラム２１８は、図１に示したデータベース資源競合制御部１０８を実現するプログラムである。データベース資源競合制御部１０８は、トランザクション処理要求受付部１０７からデータベース資源取得予定情報１０５を受け取り、トランザクション状態管理情報２２４、排他資源管理情報２２５、およびデータベース構成情報１１５を参照し、アプリケーションプログラム２１１から処理を要求されたトランザクションと実行中および中断中のトランザクションとの間のデータベース資源の競合を判定し、中断および中止するトランザクションを決定し、データベースタスク制御部１０９に処理の開始を指示する。
【００４０】
データベース資源競合制御部１０８は、図１に示したデータベースタスク制御部１０９に対して、中断する対象のトランザクションと、中止する対象のトランザクションを指定する。また、データベース資源競合制御部１０８は、データベースタスク制御部１０９に対して、トランザクション識別子情報１０３、優先度定義情報１０４、データベース資源取得予定情報１０５、および利用可能メモリ領域情報１０６を入力する。データベース資源競合制御部１０８によって行われる処理の詳細については図１２とともに後述する。
【００４１】
データベースタスク制御プログラム２１９は、図１に示したデータベースタスク制御部１０９を実現する。データベースタスク制御部１０９は、データベース資源競合制御部１０８から、トランザクション識別子情報１０３、優先度定義情報１０４、データベース資源取得予定情報１０５、利用可能メモリ領域情報１０６、および、中断する対象のトランザクションと中止する対象のトランザクションの指定を受け取り、データベースタスク１１１に対して、指定されたトランザクションの中断と中止を指示し、アプリケーションプログラム２１１から要求されたトランザクション処理の開始を指示する。
【００４２】
また、データベースタスク制御部１０９は、アプリケーションプログラム２１１から要求されたトランザクション処理の完了メッセージを受信した後、図１に示したデータベースタスク１１１に対して、中断中のトランザクション処理の再開を指示する。データベースタスク制御部１０９によって行われる処理の詳細については、図１３Ａ、図１３Ｂ、図１３Ｃ、および、図１３Ｄとともに後述する。
【００４３】
データベースタスクプログラム群２２０は、１つ以上のデータベースタスクプログラム２２１の集まりである。データベースタスクプログラム群２２０に含まれるデータベースタスクプログラム２２１の数は、データベース管理システムプログラム２１２の処理開始時に予め決められている。データベースタスクプログラム２２１の数は、アプリケーションプログラム群２１０の要件などに基づいて、情報処理装置２２６の開発者や運用者などが決定する。
【００４４】
データベースタスクプログラム２２１は、図１に示したデータベースタスク１１１を実現する。データベースタスク１１１は、データベースタスク制御部１０９からのトランザクション処理要求を受け、トランザクション処理を実行し、実行結果をアプリケーションプログラム２１１に送信する。またデータベースタスク１１１は、データベースタスク制御部１０９から、トランザクション処理の中止要求、中断要求、および再開要求を受け、それぞれ、トランザクション処理の中止、トランザクション処理の中断、およびトランザクション処理の再開を行う。データベースタスク１１１によって行われる処理（以下、データベースタスク処理と称する。）の詳細については図１４Ａ、図１４Ｂとともに後述する。
【００４５】
データベース構成プログラム２２２は、アプリケーションプログラム２１１からデータベース構築の指示を受け、データベース１１６とデータベース構成情報１１５を生成する機能（以下、データベース構築部と称する。）を実現するプログラムである。この機能の詳細については図５とともに後述する。
【００４６】
トランザクション処理要求キューリスト２２３は、アプリケーションプログラム２１１からのトランザクション処理要求を、トランザクション処理要求の到着順に保持するデータ構造である。本実施形態におけるトランザクション処理要求キューリスト２２３の一例については図６とともに後述する。
【００４７】
トランザクション状態管理情報２２４は、データベース管理システムプログラム２１２で実行中または中断中のトランザクションに関する状態と、データベースタスク１１１に関する状態の情報を保持するデータ構造である。本実施形態におけるトランザクション状態管理情報２２４については図７とともに後述する。
【００４８】
排他資源管理情報２２５は、データベース１１６内のデータベースオブジェクトの共有ロックまたは排他ロックを取得しているトランザクションに関する情報を保持するデータ構造である。排他資源管理情報２２５は、トランザクション処理がデータベースオブジェクトの共有ロックまたは排他ロックを取得した時、および、データベースオブジェクトの共有ロックまたは排他ロックを解放した時に、データベースタスク１１１によって更新される。排他資源管理情報２２５は、ロックによって排他制御を行う一般的なＤＢＭＳが有する共有ロックまたは排他ロックの状態を管理する目的のデータ構造と同様である。
【００４９】
トランザクション識別子情報１０３は、トランザクションを一意に識別するためのトランザクション識別子を記述した定義情報であり、アプリケーションプログラム２１１からデータベース管理システムプログラム２１２に対して与えられる。  
優先度定義情報１０４は、トランザクションの優先度を記述した定義情報であり、アプリケーションプログラム２１１からデータベース管理システムプログラム２１２に対して与えられる。  
データベース資源取得予定情報１０５は、トランザクション処理を実行するため必要なデータベース資源の種類と値（所要量）を記述した定義情報であり、アプリケーションプログラム２１１からデータベース管理システムプログラム２１２に対して与えられる。本実施形態におけるデータベース資源取得予定情報１０５については図７とともに後述する。
【００５０】
利用可能メモリ領域情報１０６は、共有ヒープメモリ１１２内の一連のメモリ領域の先頭アドレスとサイズを記述した定義情報である。利用可能メモリ領域情報１０６により指定されたメモリ領域は、アプリケーションプログラム２１１からのトランザクション処理要求をデータベースタスク１１１に割り当てることができない場合に、データベースタスク制御部１０９が、データベースタスク１１１を一時的に生成する目的で使用される。本実施形態における利用可能メモリ領域情報１０６については図８Ａ、図８Ｂとともに後述する。
【００５１】
ストレージデバイス２０７には、データベース１１６、コンテキスト退避領域１１３、トランザクションプロファイル情報１１４、およびデータベース構成情報１１５が保持される。  
データベース１１６は、アプリケーションプログラム群２１０が使用するデータとデータベースに関する定義情報を格納する。
【００５２】
コンテキスト退避領域１１３は、データベースタスクプログラム２２１の実行時のレジスタ情報、実行時スタック情報、および、大域変数領域の情報からなるデータベースタスクコンテキストをトランザクション別に格納する領域である。データベースタスク制御部１０９が、コンテキスト退避領域１１３へのデータベースタスクコンテキストの格納、データベースタスクコンテキストの読み出し、および、データベースタスクコンテキストの削除を行う。
【００５３】
トランザクションプロファイル情報１１４は、トランザクション処理中にアクセスしたデータベース１１６内のテーブルの名称と、トランザクション処理中に共有ロックおよび排他ロックを取得したデータベース１１６内のデータベースオブジェクトの名称を、トランザクション毎に保持するデータ構造である。データベースタスク１１１は、トランザクションプロファイル情報１１４への情報の書き込みを行う。データベース資源競合制御部１０８は、トランザクションプロファイル情報１１４から情報を参照する。本実施形態におけるトランザクションプロファイル情報１１４については図１１とともに後述する。
【００５４】
データベース構成情報１１５は、データベース１１６が生成されたストレージデバイス２０７の名称と、データベース１１６内に生成されているテーブルの名称を記述した定義情報である。データベース構成情報１１５は、データベース構築部とデータベースタスク１１１によって生成される。本実施形態におけるデータベース構成情報１１５については図４とともに後述する。
【００５５】
なお、以上のように、ＤＢＭＳ１００が備える機能（トランザクション処理要求受付部１０７、データベース資源競合制御部１０８、データベースタスク制御部１０９等）は、いずれもＣＰＵ２００がプログラムを実行することにより実現されるとして説明するが、これらの機能は必ずしもソフトウエアによって実現されなくてもよく、例えば各機能の全部または一部がハードウェアによって実現されるように構成してもよい。
【００５６】
《トランザクション並行制御処理》
図３はトランザクション並行制御処理の概要を説明するフローチャートである。以下、同図とともにトランザクション並行制御処理の概要について説明する。
【００５７】
まずアプリケーションプログラム２１１からの指示を受けると（ステップ３００）、データベース構築部は、自身が利用可能なＩ／Ｏデバイス（例えば、ストレージデバイス２０７）にデータベース１１６を生成し、データベース構成情報１１５を生成する。なお、この処理（以下、データベース構築処理と称する。）の詳細については図５とともに後述する。
【００５８】
ステップ３０１では、トランザクション処理要求受付部１０７がアプリケーションプログラム２１１からトランザクション処理の受付の開始を指示するメッセージを受信したか否かを確認する。メッセージを受信している場合には（ステップ３０１のＹＥＳ）、トランザクション処理要求受付部１０７は、アプリケーションプログラム２１１からトランザクション処理要求を受け付け、トランザクション識別子情報１０３、優先度定義情報１０４、データベース資源取得予定情報１０５、および利用可能メモリ領域情報１０６を受け取り（ステップ３０２）、ステップ３０３に進む。メッセージを受信していない場合には（ステップ３０１のＮＯ）、ステップ３０１を繰り返し行う。なお、Ｓ３０２の処理（以下、トランザクション処理要求受付処理と称する。）の詳細については図９とともに後述する。
【００５９】
ステップ３０３では、データベース資源競合制御部１０８が、データベース管理システムプログラム２１２で実行中および中断中のトランザクション処理が取得中のデータベース資源と、アプリケーション１０２から処理要求を受けたトランザクションを実行中に取得する予定のデータベース資源との間で、競合が発生するか否かを判定する。競合が発生すると判定した場合は、データベースタスク１１１で実行されているトランザクション処理を中止するか、または、中断するかを決定し、データベースタスク制御部１０９にデータベースタスクの制御の開始を指示する。なお、この処理（以下、データベース資源競合制御処理と称する。）の詳細については図１２とともに後述する。
【００６０】
ステップ３０４では、データベースタスク制御部１０９が、データベースタスク１１１の制御を行う。このデータベースタスク１１１の制御には、トランザクション処理の開始、中断、中止、および、再開が含まれる。なお、この処理（以下、データベースタスク制御処理と称する。）の詳細については図１３Ａ、図１３Ｂ、図１３Ｃ、および、図１３Ｄとともに後述する。
【００６１】
ステップ３０５では、トランザクション処理要求受付部１０７が、トランザクション処理の受付の停止を指示するメッセージを受信したか否かを確認する。メッセージを受信した場合には（ステップ３０５のＹＥＳ）、処理を終了する。メッセージを受信していない場合には（ステップ３０５のＮＯ）、ステップ３０４に戻る。
【００６２】
《データベース構成情報》
図４は、本実施形態におけるデータベース構成情報の一例である。データベース構成情報１１５は、データベース１１６が生成されているストレージデバイス２０７の名称と、データベース１１６内に生成されたテーブルの名称を記述した定義情報である。
【００６３】
図４で示したデータベース構成情報１１５は、データベース管理システムプログラム２１２が管理するデータベース１１６の名称を記述するフィールド（４０１）、データベースが生成されているＩ／Ｏデバイスの名称を記述するフィールド（４０２）、および、データベース内に生成されているテーブルの名称を記述するフィールド（４０３）を有する。
【００６４】
データベースの名称を記述するフィールド（４０１）には、データベース管理システムプログラム２１２が管理する全てのデータベースの名称を記述する。データベース管理システムプログラム２１２が管理するデータベースが１つの場合は、データベースの名称を１つだけ記述し、データベース管理システムプログラム２１２が複数個のデータベースを管理する場合は、複数個のデータベースの名称を全て記述する。
【００６５】
Ｉ／Ｏデバイスの名称を記述するフィールド（４０２）には、データベース１１６の名称を記述するフィールド（４０１）に記述されたデータベースが存在するＩ／Ｏデバイスの名称を記述する。  
テーブルの名称を記述するフィールド（４０３）には、データベース１１６の名称を記述するフィールド（４０１）に記述されたデータベース内に生成された全てのテーブルの名称を記述する。  
データベースの名称を記述するフィールド（４０１）、Ｉ／Ｏデバイスの名称を記述するフィールド（４０２）、および、テーブルの名称を記述するフィールド（４０３）は、データベースの名称を記述するフィールド（４０１）に記述されたデータベースの名称毎に三つ組を構成している。  
すなわち、Ｉ／Ｏデバイスの名称を記述するフィールド（４０２）に記述されたＩ／Ｏデバイスの名称と、テーブルの名称を記述するフィールド（４０３）に記述されたテーブルの名称は、データベースの名称を記述するフィールド（４０１）に記述されたデータベースの名称と対応付けられており、何れのデータベース名称と対応付いているかが判定できるようになっている。
【００６６】
なお、データベース構成情報１１５は、データベース構成プログラム２２２によって生成される。データベース構成情報１１５のデータベースの名称を記述するフィールド（４０１）とＩ／Ｏデバイスの名称を記述するフィールド（４０２）は、データベース構成プログラム２２２によって情報が記述される。データベース構成情報１１５のデータベースの名称を記述するフィールド（４０１）は、データベースタスクプログラム２２１によって情報が記述される。
【００６７】
例えば、図４で示したデータベース構成情報には、以下のことが記述されている。すなわち、データベース管理システムプログラム２１２が管理するデータベースには、「電話帳データベース」と「音楽データベース」の２つが含まれる。「電話帳データベース」は、名称が「内部フラッシュメモリデバイスＡ」のＩ／Ｏデバイス内に生成されており、「音楽データベース」は、名称が「内部フラッシュメモリデバイスＢ」のＩ／Ｏデバイス内に生成されている。また、「電話帳データベース」には、「電話帳テーブル」と「発信履歴テーブル」の２つのテーブルが含まれる。「音楽データベース」には、「楽曲管理テーブル」が含まれる。
【００６８】
なお、図４には本実施形態の説明で最低限必要な情報のみを示している。データベース構成情報１１５にはその他の情報があってもよいし、データベースが生成されているストレージデバイス２０７の情報とデータベース内に生成されているテーブルの情報を記述できるならば、他の形式の情報で表現してもよい。また、図４に示すデータベース構成情報１１５は、入力デバイス２０１とディスプレイデバイス２０２を用いて、アプリケーションプログラム群２１０を介して、対話的に生成することもできる。
【００６９】
《データベース構築処理》
図５は図３で説明したデータベース構築処理の詳細を説明するフローチャートである。以下、同図とともにデータベース構築処理の詳細を説明する。
【００７０】
データベース構築部は、アプリケーションからの指示を受けると、自身が利用可能なＩ／Ｏデバイス（例えば、ストレージデバイス２０７）にデータベース１１６を構築する（ステップ５００）。ここで、データベースの構築とは、アプリケーションプログラム２１１がデータベース１１６を使用して動作できるように、Ｉ／Ｏデバイス内にデータベース用の領域を確保し、データベース１１６に関する定義情報をデータベース用の領域内に生成することをいう。  
次にデータベース構築部は、構築したデータベースの構成に関する情報に基づき、データベース構成情報１１５を生成する（ステップ５０１）。
【００７１】
《トランザクション処理要求キューリスト》
図６にトランザクション処理要求キューリスト２２３の一例を示している。トランザクション処理要求キューリスト２２３は、アプリケーションプログラム２１１からのトランザクション処理要求を、トランザクション処理要求の到着順に保持するデータ構造である。
【００７２】
同図に示すトランザクション処理要求キューリスト２２３は、トランザクション処理要求キューヘッダテーブル（６０１）とトランザクション処理要求キュー（６０４Ａ、６０４Ｂ、６０４Ｃ）からなる。
【００７３】
トランザクション処理要求キューヘッダテーブル（６０１）は、優先度の値を記述するフィールド（６０２）とトランザクション処理要求キュー（６０４Ａ、６０４Ｂ、および、６０４Ｃ）の先頭へのポインタを登録するフィールド（６０３）の２つの組からなるデータ構造の配列である。  
トランザクション処理要求キューヘッダテーブル（６０１）は、データベース管理システムプログラム２１２が扱うトランザクション処理の優先度として取り得る値の総数と同じ数の配列要素を持つ。トランザクション処理要求キューヘッダテーブル（６０１）において、別々の配列要素の優先度の値を記述するフィールド（６０２）には、別々の優先度の値が登録される。
【００７４】
トランザクション処理要求キューの先頭へのポインタを登録するフィールド（６０３）には、トランザクション処理要求キューヘッダテーブル（６０１）の配列要素毎に対応する優先度の値を記述するフィールド（６０２）に登録された優先度の値を持つトランザクション処理のトランザクション処理要求キュー（６０４Ａ、６０４Ｂ、および、６０４Ｃ）の先頭へのポインタを登録する。
【００７５】
トランザクション処理要求キューは、トランザクションキュー構造体（６０５Ａ、６０５Ｂ）、トランザクション処理要求キューの先頭へのポインタを登録するフィールド（６０３）からトランザクション処理要求キュー（６０４Ａ）の先頭のトランザクションキュー構造体（６０５Ａ）へのポインタ（６１０）、トランザクションキュー構造体（６０５Ａ、６０５Ｂ）間のポインタ（６１１）、および、トランザクション処理要求キュー（６０４Ａ）の末尾のトランザクションキュー構造体（６０５Ｂ）からトランザクション処理要求キューの先頭へのポインタを登録するフィールド（６０３）へのポインタ（６１２）からなる。
【００７６】
トランザクション処理要求キューは、トランザクション処理要求キューを構成する全てのトランザクションキュー構造体が一方向のポインタによって接続されており、トランザクション処理要求キュー（６０４Ａ）の先頭のトランザクションキュー構造体（６０５Ａ）へのポインタ（６１０）から開始して、全てのトランザクションキュー構造体を辿ることができるようになっている。
【００７７】
トランザクション処理要求キューの先頭へのポインタを登録するフィールド（６０３）からポインタ（６１０）によって接続されるトランザクションキュー構造体を先頭のトランザクションキュー構造体（６０５Ａ）という。ポインタ（６１２）により、トランザクション処理要求キューの先頭へのポインタを登録するフィールド（６０３）を参照しているトランザクションキュー構造体を末尾のトランザクションキュー構造体（６０５Ｂ）という。
【００７８】
トランザクション処理要求キューは、先頭のトランザクションキュー構造体（６０５Ａ）に近いほど、アプリケーションプログラム２１１からのトランザクション処理要求の到着が早いことを表し、末尾のトランザクションキュー構造体（６０５Ｂ）に近いほど、アプリケーションプログラム２１１からのトランザクション処理要求の到着が遅いことを表す。
【００７９】
トランザクションキュー構造体は、トランザクション識別子情報を保持する領域（６０６Ａ、６０６Ｂ）、優先度定義情報を保持する領域（６０７Ａ、６０６Ｂ）、データベース資源取得予定情報を保持する領域（６０８Ａ、６０８Ｂ）、および、利用可能メモリ領域情報（６０９Ａ、６０９Ｂ）を保持する領域からなる。  
トランザクション識別子情報を保持する領域（６０６Ａ、６０６Ｂ）には、アプリケーションプログラム２１１からデータベース管理システムプログラム２１２に入力されたトランザクション識別子情報１０３が保持される。  
優先度定義情報を保持する領域（６０７Ａ、６０６Ｂ）には、アプリケーションプログラム２１１からデータベース管理システムプログラム２１２に入力された優先度定義情報１０４が保持される。  
データベース資源取得予定情報を保持する領域（６０８Ａ、６０８Ｂ）には、アプリケーションプログラム２１１からデータベース管理システムプログラム２１２に入力されたデータベース資源取得予定情報１０５が保持される。  
利用可能メモリ領域情報（６０９Ａ、６０９Ｂ）には、アプリケーションプログラム２１１からデータベース管理システムプログラム２１２に入力された利用可能メモリ領域情報１０６が保持される。
【００８０】
トランザクション処理要求キューリスト２２３は、トランザクション処理要求受付部１０７によって操作される。  
例えば、図６で示したトランザクション処理要求キューリストは以下のことを表している。  
データベース管理システムプログラム２１２が扱うトランザクション処理の優先度の値は、「１」から「２００」までの範囲である。優先度の値が「１００」のトランザクション処理が、アプリケーションプログラム群２１０からデータベース管理システムプログラム２１２に２個到着している。  
優先度の値が「１００」のトランザクション処理に関して、トランザクション識別子情報TID1（６０６Ａ）を含むトランザクションキュー構造体に対応するトランザクション処理要求の方が、トランザクション識別子情報TID2（６０６Ｂ）を含むトランザクションキュー構造体（６０５Ｂ）に対応するトランザクション処理要求よりも先に到着した。
【００８１】
なお、トランザクション処理要求キューリスト２２３には、図６に示した以外の情報が含まれていてもよいし、アプリケーションプログラム２１１からデータベース管理システムプログラム２１２へのトランザクション処理要求を、トランザクション処理の優先度毎に到着順に保持できるならば他の形式の情報で表現してもよい。
【００８２】
《データベース資源取得予定情報》
図７にデータベース資源取得予定情報１０５の一例を示している。データベース資源取得予定情報１０５は、トランザクション処理を実行するため必要なデータベース資源の種類と値（所要量）を記述した定義情報である。
【００８３】
同図に示すデータベース資源取得予定情報１０５は、データベース資源の種類を記述するフィールド（７０１）と、データベース資源の値（所要量）を記述するフィールド（７０２）からなる。  
データベース資源の種類を記述するフィールド（７０１）には、トランザクション処理を実行するために取得する必要があるデータベース資源の種類が記述される。データベース資源の種類を記述するフィールド（７０１）に記述されるデータベース資源の種類は、データベースキャッシュメモリなどである。
【００８４】
データベース資源の値（所要量）を記述するフィールド（７０２）には、データベース資源の種類を記述するフィールド（７０１）に記述されたデータベース資源の種類毎に、その値（所要量）を記述する。  
例えば、図７で示したデータベース資源取得予定情報１０５は、アプリケーションプログラム２１１からデータベース管理システムプログラム２１２に対して要求されたトランザクション処理を実行するために、５００ＫＢｙｔｅのデータベースキャッシュメモリを取得する必要があることを示す。
【００８５】
なお、図７のデータベース資源取得予定情報１０５には他の情報が含まれていてもよいし、トランザクション処理を実行するために取得する必要があるデータベース資源の種類と値（所要量）が記述できるならば、他の形式の情報で表現してもよい。データベース資源取得予定情報１０５は、アプリケーションプログラム２１１から与えられる。またデータベース資源取得予定情報１０５は、入力デバイス２０１とディスプレイデバイス２０２を用いて、アプリケーションプログラム群２１０を介して対話的に生成することもできる。
【００８６】
《利用可能メモリ領域情報》
図８Ａ、図８Ｂに利用可能メモリ領域情報１０６の一例を示している。利用可能メモリ領域情報１０６は、共有ヒープメモリ１１２内の一連のメモリ領域の先頭アドレスとサイズを記述した定義情報である。
【００８７】
利用可能メモリ領域情報１０６は、共有ヒープメモリ１１２内のメモリアドレスを記述するフィールド（８０１Ａ、８０１Ｂ）と、共有ヒープメモリ１１２内のメモリ領域のサイズを記述するフィールド（８０２Ａ、８０２Ｂ）からなる。  
メモリアドレスを記述するフィールド（８０１Ａ、８０１Ｂ）には、共有ヒープメモリ１１２内の一連のメモリ領域の先頭アドレスを記述する。メモリ領域のサイズを記述するフィールド（８０２Ａ、８０２Ｂ）には、共有ヒープメモリ１１２内の一連のメモリ領域のサイズを記述する。
【００８８】
例えば、図８Ａで示した利用可能メモリ領域情報１０６は、アプリケーションプログラム２１１からＤＢＭＳ１００（データベース管理システムプログラム２１２）に対して要求されたトランザクション処理を実行するために、共有ヒープメモリ１１２内のアドレス０ｘ１２３４００００から始まる１０２４ＫＢｙｔｅの一連のメモリ領域を使用できることを示す。
【００８９】
また、図８Ｂで示した利用可能メモリ領域情報１０６は、アプリケーションプログラム２１１からＤＢＭＳ１００（データベース管理システムプログラム２１２）に対して要求されたトランザクション処理を実行するために、共有ヒープメモリ１１２内のメモリ領域を使用できないことを示す。図８Ｂ中の「ｎ／ａ」は、使用不能（n/a : not available）の意味であり、メモリ領域を使用できないことを示す。利用可能メモリ領域情報１０６は、アプリケーションプログラム２１１から与えられる。
【００９０】
なお、図８Ａ、図８Ｂには本実施形態の説明で最低限必要な情報を示している。利用可能メモリ領域情報１０６にはその他の情報が含まれていてもよいし、共有ヒープメモリ１１２内の一連のメモリ領域の先頭アドレスとサイズが記述できるならば、他の形式の情報で表現してもよい。また、図８Ａ、図８Ｂに示す利用可能メモリ領域情報１０６は、入力デバイス２０１とディスプレイデバイス２０２を用いて、アプリケーションプログラム群２１０によって実現されるアプリケーションを介して、対話的に作成することもできる。
【００９１】
《トランザクション処理要求受付処理》
図９は図３で説明したトランザクション処理要求受付処理（ステップ３０２の処理）の詳細を説明するフローチャートである。
【００９２】
まずトランザクション処理要求受付部１０７は、トランザクション処理要求受付プログラム２１７が参照する変数である処理フェーズに「０」を設定する（ステップ９００）。  
ステップ９０１では、トランザクション処理要求受付部１０７は、アプリケーションプログラム２１１からトランザクション処理の実行を要求するメッセージを受信したか否かを確認する。トランザクション処理の実行を要求するメッセージを受信した場合には（ステップ９０１のＹＥＳ）、ステップ９０２へ進む。トランザクション処理の実行を要求するメッセージを受信していない場合には（ステップ９０１のＮＯ）、ステップ９０５に進む。
【００９３】
ステップ９０２では、トランザクション処理要求受付部１０７は、アプリケーションプログラム２１１から、トランザクション識別子情報１０３、優先度定義情報１０４、データベース資源取得予定情報１０５、および、利用可能メモリ領域情報１０６を受け取る。  
ステップ９０３では、トランザクション処理要求受付部１０７が、アプリケーションプログラム２１１から受け取ったトランザクション識別子情報１０３、優先度定義情報１０４、データベース資源取得予定情報１０５、および、利用可能メモリ領域情報１０６を保持するトランザクションキュー構造体（ＴＱ１とする）を生成する。
【００９４】
ステップ９０４では、トランザクション処理要求受付部１０７が、トランザクション処理要求キューリスト２２３の優先度定義情報１０４に記述された優先度の値に対応するトランザクション処理要求キューの末尾にトランザクションキュー構造体ＴＱ１を追加する。ステップ９０４の後はステップ９０５に進む。  
ステップ９０５では、トランザクション処理要求受付部１０７が、トランザクション処理要求受付プログラム２１７の処理フェーズが「０」であるか否かを確認する。「処理フェーズ」が「０」である場合は（ステップ９０５のＹＥＳ）、ステップ９０６へ進む。処理フェーズが「０」でない場合は（ステップ９０５のＮＯ）、ステップ９１３へ進む。  
ステップ９０６では、トランザクション処理要求受付部１０７が、トランザクション処理要求キューリスト２２３の何れのトランザクション処理要求キューにもトランザクションキュー構造体が存在しないか（空か）否かを確認する。存在しない（空）の場合は（ステップ９０６のＹＥＳ）、ステップ９０１へ戻る。存在する（空でない）場合は（ステップ９０６のＮＯ）、ステップ９０７へ進む。
【００９５】
ステップ９０７では、トランザクション処理要求受付部１０７は、トランザクション処理要求受付プログラム２１７の処理フェーズに「１」を設定する。  
ステップ９０８では、トランザクション処理要求受付部１０７は、トランザクションキュー構造体を１つ以上持つトランザクション処理要求キューのうち、最も高い優先度のトランザクション処理のトランザクション処理要求キューの先頭から、トランザクションキュー構造体（ＴＱ２とする）を１つ取り外す。
【００９６】
ステップ９０９では、トランザクション処理要求受付部１０７は、トランザクション状態管理情報２２４を参照し、データベース管理システムプログラム２１２で実行中のトランザクション処理のうち、トランザクションキュー構造体ＴＱ２が保持する優先度定義情報に記述された優先度よりも、優先度が低いトランザクション処理が存在するか否かを確認する。優先度が低いトランザクション処理が存在する場合には（ステップ９０９のＹＥＳ）、ステップ９１２へ進む。優先度が低いトランザクション処理が存在しない場合は（ステップ９０９のＮＯ）、ステップ９１０へ進む。
【００９７】
ステップ９１０では、トランザクション処理要求受付部１０７は、トランザクションキュー構造体ＴＱ２を、トランザクションキュー構造体ＴＱ２が保持する優先度定義情報に記述された優先度に対応するトランザクション処理要求キューの末尾に追加する。  
ステップ９１１では、トランザクション処理要求受付部１０７は、トランザクション処理要求受付プログラム２１７の処理フェーズに「０」を設定し、ステップ９０１へ戻る。  
ステップ９１２では、トランザクション処理要求受付部１０７は、データベース資源競合制御部１０８に、データベース資源の競合判定と中断又は中止するトランザクション処理の決定を指示し、ステップ９０１へ戻る。
【００９８】
ステップ９１３では、トランザクション処理要求受付部１０７は、トランザクション処理要求受付プログラム２１７の処理フェーズが「１」であるか否かを確認する。処理フェーズが「１」である場合は（ステップ９１３のＹＥＳ）、ステップ９１４へ進む。処理フェーズが「１」でない場合は（ステップ９１３のＮＯ）、ステップ９１９へ進む。
【００９９】
ステップ９１４では、トランザクション処理要求受付部１０７は、データベース資源競合制御部１０８から処理の実行が完了したことを通知するメッセージを受信したか否かを確認する。処理の実行が完了したことを通知するメッセージを受信した場合は（ステップ９１４のＹＥＳ）、ステップ９１５へ進む。処理の実行が完了したことを通知するメッセージを受信していない場合は（ステップ９１４のＮＯ）、ステップ９１６へ進む。  
ステップ９１５では、トランザクション処理要求受付部１０７は、トランザクション処理要求受付プログラム２１７の処理フェーズを「０」と設定し、その後はステップ９０１へ戻る。
【０１００】
ステップ９１６では、トランザクション処理要求受付部１０７は、データベース資源競合制御部１０８からデータベース資源の競合の解決に失敗したことを通知するメッセージを受信したか否かを確認する。競合の解決に失敗したことを通知するメッセージを受信した場合は（ステップ９１６のＹＥＳ）、ステップ９１７へ進む。競合の解決に失敗したことを通知するメッセージを受信していない場合は（ステップ９１６のＮＯ）、ステップ９１９へ進む。
【０１０１】
ステップ９１７では、トランザクション処理要求受付部１０７は、トランザクションキュー構造体ＴＱ２を、トランザクションキュー構造体ＴＱ２が保持する優先度定義情報に記述された優先度に対応するトランザクション処理要求キューの末尾に追加する。  
ステップ９１８では、トランザクション処理要求受付部１０７は、トランザクション処理要求受付プログラム２１７の処理フェーズを「０」と設定し、ステップ９０１へ戻る。
【０１０２】
ステップ９１９では、トランザクション処理要求受付部１０７は、トランザクション処理要求受付プログラム２１７の処理を停止する指示を受信したか否かを確認する。処理を停止する指示を受信した場合は（ステップ９１９のＹＥＳ）、トランザクション処理要求受付プログラム２１７の処理を終了する。処理を停止する指示を受信していない場合はステップ９１９のＮＯ）、ステップ９０１へ戻る。
【０１０３】
なお、以上の説明において、トランザクション処理要求キューの末尾にトランザクションキュー構造体を追加するとは、次のことを意味する。すなわち、トランザクションキュー構造体を追加する前にトランザクション処理要求キューの末尾であったトランザクションキュー構造体からトランザクション処理要求キューヘッダテーブルへのポインタを取り除き、トランザクションキュー構造体を追加する前にトランザクション処理要求キューの末尾であったトランザクションキュー構造体から新たに追加するトランザクションキュー構造体へのポインタを生成し、新たに追加したトランザクションキュー構造体からトランザクション処理要求キューヘッダテーブルのフィールド６０３へのポインタを生成する。
【０１０４】
またトランザクション処理要求キューの先頭からトランザクションキュー構造体ＴＱ２を取り外すとは、次のことを意味する。すなわち、先頭のトランザクションキュー構造体からポインタで参照されているトランザクションキュー構造体をＴＱＮとして、トランザクション処理要求キューヘッダテーブルのフィールド６０３からトランザクションキュー構造体ＴＱ２へのポインタを削除し、トランザクションキュー構造体ＴＱ２からトランザクションキュー構造体をＴＱＮへのポインタを削除し、トランザクション処理要求キューヘッダテーブルのフィールド６０３からトランザクションキュー構造体ＴＱＮへのポインタを生成する。
【０１０５】
《トランザクション状態管理情報》
図１０にトランザクション状態管理情報２２４の一例を示している。トランザクション状態管理情報２２４は、実行中および中断中のトランザクションの状態を表す情報と、データベースタスク１１１の状態を表す情報を保持するデータ構造である。
【０１０６】
同図に示すトランザクション状態管理情報２２４は、実行中トランザクション管理リスト（１００１）、中断中トランザクション管理リスト（１００２）、および、データベースタスク管理テーブル（１００３）からなる。  
実行中トランザクション管理リスト（１００１）は、データベース管理システムプログラム２１２で実行中のトランザクション処理の状態に関する情報を保持するデータ構造である。  
実行中トランザクション管理リスト（１００１）は、実行中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００４）、トランザクション状態管理構造体（１００５、１００６）、実行中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００４）からトランザクション状態管理構造体へのポインタ（１０１７）、トランザクション状態管理構造体（１００５、１００６）間のポインタ（１０１８）、および、トランザクション状態管理構造体から実行中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００４）へのポインタ（１０１９）からなる。  
実行中トランザクション管理リスト（１００１）は、実行中トランザクション管理リストを構成する全てのトランザクション状態管理構造体が一方向のポインタによって接続されており、実行中トランザクション管理リストの先頭を参照するポインタ（１０１７）から開始して、全てのトランザクション状態管理構造体を辿ることができるようになっている。
【０１０７】
中断中トランザクション管理リスト（１００２）は、データベース管理システムプログラム２１２で中断中のトランザクション処理の状態に関する情報を保持するデータ構造である。  
中断中トランザクション管理リスト（１００２）は、中断中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００７）、トランザクション状態管理構造体（１００８）、中断中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００７）からトランザクション状態管理構造体へのポインタ（１０２０）、トランザクション状態管理構造体間のポインタ、および、トランザクション状態管理構造体から中断中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００７）へのポインタ（１０２１）からなる。  
中断中トランザクション管理リスト（１００２）は、中断中トランザクション管理リストを構成する全てのトランザクション状態管理構造体が一方向のポインタによって接続されており、中断中トランザクション管理リストの先頭を参照するポインタ（１０２０）から開始して、全てのトランザクション状態管理構造体を辿ることができるようになっている。
【０１０８】
トランザクション状態管理構造体（１００５、１００６、１００８）は、トランザクション識別子を登録するフィールド１０１１、優先度の値を登録するフィールド１０１２、データベースキャッシュサイズを登録するフィールド１０１３、データベースタスク番号を登録するフィールド１０１４、中断要求元トランザクション識別子を登録するフィールド１０１５、および、再開可能フラグを登録するフィールド１０１６からなる。
【０１０９】
トランザクション識別子を登録するフィールド（１０１１）には、実行中または中断中のトランザクション処理のトランザクション識別子を登録する。  
優先度の値を登録するフィールド（１０１２）には、トランザクション識別子を登録するフィールド（１０１１）に登録されたトランザクション識別子のトランザクション処理の優先度の値を登録する。  
データベースキャッシュサイズを登録するフィールド（１０１３）には、トランザクション識別子を登録するフィールド（１０１１）に登録されたトランザクション識別子のトランザクション処理が取得しているデータベースキャッシュメモリのサイズを登録する。
【０１１０】
データベースタスク番号を登録するフィールド（１０１４）には、トランザクション識別子を登録するフィールド（１０１１）に登録されたトランザクション識別子のトランザクション処理が割り当てられているデータベースタスクのデータベースタスク番号を登録する。  
データベースタスク番号を登録するフィールド（１０１４）に「０」が登録されている場合、実行中のトランザクション処理ならば、共有ヒープメモリ１１２内の一連のメモリ領域に生成されたデータベースタスクに割り当てられていることを表し、中断中のトランザクション処理ならば、トランザクション処理が何れのデータベースタスクにも割り当てられていないことを表す。
【０１１１】
中断要求元トランザクション識別子を登録するフィールド（１０１５）には、トランザクション識別子を登録するフィールド（１０１１）に登録されたトランザクション識別子のトランザクション処理を中断させる原因となったトランザクション処理のトランザクション識別子が登録される。トランザクション処理が実行中の場合は、「０」を登録する。  
再開可能フラグを登録するフィールド（１０１６）には、中断中のトランザクション処理を再開することができるか否かを表すフラグ（「再開可能」または「再開不可」）を登録する。トランザクション処理が実行中の場合は、「０」を登録する。
【０１１２】
データベースタスク管理テーブル（１００３）は、データベースタスクに付与された番号であるデータベースタスク番号を登録するフィールド（１００９Ａ、１００９Ｂ、１００９Ｃ）とトランザクション識別子を登録するフィールド（１０１０Ａ、１０１０Ｂ、１０１０Ｃ）の２つの組からなるデータ構造の配列である。  
データベースタスク管理テーブル（１００３）は、データベースタスクプログラム群２２０に含まれるデータベースタスクプログラム２２１の数と同じ数の配列要素を持つ。データベースタスクプログラム群２２０に含まれるデータベースタスクプログラム２２１の数はデータベース管理システムプログラム２１２の処理開始時に予め決められているので、データベースタスク管理テーブル（１００３）が持つ配列要素の数は、データベース管理システムプログラム２１２の処理開始時に予め決められている。
【０１１３】
データベースタスク番号を登録するフィールド（１００９Ａ、１００９Ｂ、１００９Ｃ）には、データベース管理システムプログラム２１２内でデータベースタスクを一意に識別するデータベースタスク番号が登録される。データベースタスク管理テーブル（１００３）において、別々の配列要素のデータベースタスク番号を記述するフィールドには、別々のデータベースタスク番号が登録される。  
トランザクション識別子を登録するフィールド（１０１０Ａ、１０１０Ｂ、１０１０Ｃ）には、各配列要素内のデータベースタスク番号を登録するフィールドに登録されたデータベースタスク番号に該当するデータベースタスク１１１に割り当てられたトランザクション処理のトランザクション識別子を登録する。
【０１１４】
データベースタスク番号は、「０」を除いた値（文字列や数値など）であり、データベース管理システムプログラム２１２内でデータベースタスクを一意に識別することができるならば、表現形態やデータ構造は問わない。データベース管理システムプログラム２１２の各データベースタスクに対応するデータベースタスク番号は、データベース管理システムプログラム２１２の処理開始時に予め決められている。
【０１１５】
例えば、図１０で示したトランザクション処理状態管理情報２２４は、以下のことを表している。  
データベースタスク群１１０には、データベースタスク番号が「１」、「２」、および、「３」で表される３つのデータベースタスク１１１がある。データベースタスク番号が「１」のデータベースタスク１１１は、トランザクション識別子が「telephone_transaction_1」で表されるトランザクション処理に割り当てられており、データベースタスク番号が「２」のデータベースタスク１１１は、トランザクション識別子が「musicapp_transaction_2」で表されるトランザクション処理に割り当てられており、データベースタスク番号が「２」のデータベースタスク１１１には、トランザクション処理が割り当てられていない。
【０１１６】
現在実行中のトランザクション処理が２つある。実行中のトランザクション処理は、トランザクション識別子が「telephone_transaction_1」で表されるトランザクション処理とトランザクション識別子が「telephone_transaction_1」で表されるトランザクション処理である。  
トランザクション識別子が「telephone_transaction_1」で表されるトランザクション処理は、優先度の値が「１００」であり、５０ＫＢｙｔｅのデータベースキャッシュメモリを取得しており、データベースタスク番号が「１」で表されるデータベースタスク１１１に割り当てられている。  
トランザクション識別子が「musicapp_transaction_2」で表されるトランザクション処理は、優先度の値が「８０」であり、１０２４ＫＢｙｔｅのデータベースキャッシュメモリを取得しており、データベースタスク番号が「２」で表されるデータベースタスク１１１に割り当てられている。
【０１１７】
現在中断中のトランザクション処理が１つある。中断中のトランザクション処理は、トランザクション識別子が「gameapp_transaction_1」で表されるトランザクション処理である。  
トランザクション識別子が「gameapp_transaction_1」で表されるトランザクション処理は、優先度の値が「８０」であり、５０ＫＢｙｔｅのデータベースキャッシュメモリを取得しており、データベースタスク１１１には割り当てられていない。また、トランザクション識別子が「gameapp_transaction_1」で表されるトランザクション処理は、トランザクション識別子が「telephone_transaction_1」で表されるトランザクション処理によって中断されている。トランザクション識別子が「gameapp_transaction_1」で表されるトランザクション処理は、再開できる状態でない。
【０１１８】
なお、図１０に示すトランザクション状態管理情報２２４は、本実施形態の説明で最低限必要な情報を示したものに過ぎない。トランザクション状態管理情報２２４にはその他の情報が含まれていてもよいし、実行中および中断中のトランザクション処理の状態に関する情報と、データベースタスク１１１の状態に関する情報を保持できるならば、他の形式の情報で表現してもよい。
【０１１９】
《トランザクションプロファイル情報》
図１１にトランザクションプロファイル情報１１４の一例を示している。同図に示すトランザクションプロファイル情報１１４は、トランザクション処理中にアクセスしたデータベース１１６内のテーブルの名称と、トランザクション処理中に共有ロックおよび排他ロックを取得したデータベース１１６内のデータベースオブジェクトの名称を、トランザクション毎に保持する。  
同図に示すトランザクションプロファイル情報１１４は、トランザクション識別子を記述するフィールド（１１０１）、トランザクション処理の実行時にアクセスする対象のテーブルを記述するフィールド（１１０２）、および、トランザクション処理の実行時に排他を取得するデータベースオブジェクトを記述するフィールド（１１０３）からなる。
【０１２０】
トランザクション識別子を記述するフィールド（１１０１）には、データベースタスク群１１０に含まれるデータベースタスク１１１から要求されたトランザクション処理のトランザクション識別子を記述する。  
アクセスする対象のテーブルを記述するフィールド（１１０２）には、トランザクション識別子を記述するフィールド（１１０１）に記述されたトランザクション識別子に対応するトランザクション処理の実行中にアクセスする対象のテーブルの名称を記述する。
【０１２１】
排他を取得するデータベースオブジェクトを記述するフィールド（１１０３）は、共有ロックを取得するデータベースオブジェクトを記述するフィールド（１１０４）と排他ロックを取得するデータベースオブジェクトを記述するフィールド（１１０５）からなる。
【０１２２】
共有ロックを取得するデータベースオブジェクトを記述するフィールド（１１０４）には、トランザクション識別子を記述するフィールド（１１０１）に記述されたトランザクション識別子に対応するトランザクション処理の実行中に共有ロックを取得するデータベースオブジェクトを記述する。  
排他ロックを取得するデータベースオブジェクトを記述するフィールド（１１０５）は、トランザクション識別子を記述するフィールド（１１０１）に記述されたトランザクション識別子に対応するトランザクション処理の実行中に排他ロックを取得するデータベースオブジェクトを記述する。
【０１２３】
トランザクション識別子を記述するフィールド（１１０１）、トランザクション処理の実行時にアクセスする対象のテーブルを記述するフィールド（１１０２）、共有ロックを取得するデータベースオブジェクトを記述するフィールド（１１０４）、および、排他ロックを取得するデータベースオブジェクトを記述するフィールド（１１０５）は、トランザクション識別子を記述するフィールド（１１０１）に記述されたトランザクション識別子毎に四つ組を構成している。
【０１２４】
すなわち、トランザクション処理の実行時にアクセスする対象のテーブルを記述するフィールド（１１０２）に記述されたテーブルの名称、共有ロックを取得するデータベースオブジェクトを記述するフィールド（１１０４）に記述されたデータベースオブジェクトの名称、および、排他ロックを取得するデータベースオブジェクトを記述するフィールド（１１０５）に記述されたデータベースオブジェクトの名称は、トランザクション識別子を記述するフィールド（１１０１）に記述されたトランザクション識別子と対応付けられており、何れのトランザクション識別子と対応付いているかが判定できるようになっている。  
なお、トランザクションプロファイル情報１１４は、データベースタスク１１１により、各フィールドの情報が記述される。
【０１２５】
図１１で示したトランザクションプロファイル情報には、以下のことが記述されている。トランザクション識別子が「telephone_tranasaction_1」で表されるトランザクション処理は、トランザクション処理の実行中に、「電話帳テーブル」と「発信履歴テーブル」へのアクセスを行い、「電話帳テーブル」に対して共有ロックを取得し、「発信履歴テーブル」に対して排他ロックを取得する。  
トランザクション識別子が「telephone_tranasaction_2」で表されるトランザクション処理は、トランザクション処理の実行中に、「電話帳テーブル」へのアクセスを行い、「電話帳テーブル」に対して共有ロックを取得する。
【０１２６】
図１１のトランザクションプロファイル情報１１４には本実施形態の説明で最低限必要な情報を示したが、その他の情報が含まれていてもよい。またトランザクション処理中にアクセスしたテーブルの情報とトランザクション処理中に共有ロックおよび排他ロックを取得したデータベースオブジェクトの情報をトランザクション毎に保持できるならば、他の形式の情報で表現してもよい。
【０１２７】
《データベース資源競合制御処理》
図１２はデータベース資源競合制御処理ステップ３０３の詳細を説明するフローチャートである。  
まずステップ１２００において、データベース資源競合制御部１０８は、トランザクション処理要求受付部１０７から処理開始の指示を受け、中止する対象となるトランザクション処理を保持する中止対象トランザクションリスト（ＬＣとする）と、中断する対象となるトランザクション処理を保持する中断対象トランザクションリスト（Ｌステップとする）を夫々初期化する。なお、ＬＣとＬＳは、トランザクション処理を要素とする空の集合である。
【０１２８】
続くステップ１２０１では、データベース資源競合制御部１０８は、トランザクション処理要求受付部１０７から、トランザクション識別子情報１０３、優先度定義情報１０４、データベース資源取得予定情報１０５、および、利用可能メモリ領域情報１０６を受け取る。  
ステップ１２０２では、データベース資源競合制御部１０８は、トランザクション識別子情報１０３に記述されたトランザクション識別子をＴとする。
【０１２９】
ステップ１２０３では、データベース資源競合制御部１０８は、トランザクションプロファイル情報１１４のトランザクション識別子を記述するフィールド（１１０１）に、トランザクション識別子Ｔが存在するか否かを確認する。トランザクション識別子Ｔが存在する場合は（ステップ１２０３のＹＥＳ）、ステップ１２０４へ進む。トランザクション識別子Ｔが存在しない場合はステップ１２０３のＮＯ）、ステップ１２０５へ進む。
【０１３０】
ステップ１２０４では、データベース資源競合制御部１０８は、トランザクション識別子Ｔのトランザクション処理を実行中に取得するデータベーオブジェクトの共有ロックと、実行中または中断中のトランザクション処理が取得中のデータベースオブジェクトのロックとの間で、競合が発生するか否かを判定し、競合が発生する場合は競合を解決するために中断または中止する必要があるトランザクション処理を決定する。なお、この処理（以下、共有ロック競合制御処理と称する。）の詳細については図１５とともに後述する。その後、ステップ１２０６に進む。
【０１３１】
ステップ１２０５では、データベース資源競合制御部１０８は、トランザクション状態管理情報２２４の実行中トランザクション管理リスト（１００１）と中断中トランザクション管理リスト（１００２）が保持するトランザクション状態管理構造体のうち、優先度の値（１０１２）が、優先度定義情報１０４に記述された優先度よりも小さい（優先度が低い）トランザクション状態管理構造体のトランザクション識別子（１０１１）に対応するトランザクション処理を、全てＬＣに追加し、ステップ１２１３へ進む。
【０１３２】
ステップ１２０６では、データベース資源競合制御部１０８は、トランザクション識別子Ｔのトランザクション処理を実行中に取得するデータベーオブジェクトの排他ロックと、実行中または中断中のトランザクション処理が取得中のデータベースオブジェクトのロックとの間で、競合が発生するか否かを判定し、競合が発生する場合は競合を解決するために中断または中止する必要があるトランザクション処理を決定する。なお、この処理（以下、排他ロック競合制御処理と称する。）の詳細については図１６とともに後述する。
【０１３３】
ステップ１２０７では、データベース資源競合制御部１０８は、トランザクション識別子Ｔのトランザクション処理と、実行中および中断中のトランザクション処理との間で、データベースキャッシュメモリの競合が発生するか否かを判定し、競合が発生する場合は競合を解決するために中止する必要があるトランザクション処理を決定する。なお、この処理（以下、データベースキャッシュメモリ競合制御処理と称する。）の詳細については図１７とともに後述する。
【０１３４】
ステップ１２０８では、データベース資源競合制御部１０８は、データベースキャッシュメモリの競合解決に失敗したことを示すフラグがＯＮであるか否かを確認する。データベースキャッシュメモリの競合解決に失敗したことを示すフラグがＯＮである場合は（ステップ１２０８のＹＥＳ）、ステップ１２１５へ進む。フラグがＯＮでない（ＯＦＦである）場合は（ステップ１２０８のＮＯ）、ステップ１２０９へ進む。  
ステップ１２１５では、データベース資源競合制御部１０８は、トランザクション処理要求受付部１０７に対して、データベース資源の競合の解決に失敗したことを通知するメッセージを送信し、処理を終了する。
【０１３５】
ステップ１２０９では、データベース資源競合制御部１０８は、トランザクション識別子Ｔのトランザクション処理と、実行中および中断中のトランザクション処理との間で、Ｉ／Ｏデバイス使用権の競合が発生するか否かを判定し、競合が発生する場合は競合を解決するために中断または中止する必要があるトランザクション処理を決定する。なお、この処理（以下、Ｉ／Ｏデバイス競合制御処理と称する。）の詳細については図１８とともに後述する。
【０１３６】
ステップ１２１０では、データベース資源競合制御部１０８は、トランザクション状態管理情報２２４のデータベースタスク管理テーブル（１００３）に、トランザクション識別子を登録するフィールドに「０」が登録されている配列要素が存在するか（トランザクションを未割り当てのデータベースタスクがあるか）否かを確認する。該当する配列要素が存在する（トランザクションを未割り当てのデータベースタスクがある）場合は（ステップ１２１０のＹＥＳ）、ステップ１２１３へ進む。該当する配列要素が存在しない（トランザクションを未割り当てのデータベースタスクがない）場合は（ステップ１２１０のＮＯ）、ステップ１２１１へ進む。
【０１３７】
ステップ１２１１では、データベース資源競合制御部１０８は、集合ＬＣとＬＳが共に空集合（要素が存在しない）か否かを確認する。共に空集合の場合は（ステップ１２１１でＹＥＳ）、Ｓ１２１２へ進む。どちらかの集合が空集合でない場合は（ステップ１２１１でＮＯ）、ステップ１２１３へ進む。
【０１３８】
ステップ１２１２では、データベース資源競合制御部１０８は、トランザクション状態管理情報２２４の実行中トランザクション管理リスト（１００１）が保持するトランザクション状態管理構造体のうち、優先度の値が最も小さい（優先度が低い）トランザクション状態管理構造体に登録されているトランザクション識別子に対応するトランザクション処理を、ＬＳに追加する。
【０１３９】
ステップ１２１３では、データベース資源競合制御部１０８は、中止対象トランザクションリストＬＣ、中断対象トランザクションリストＬＳ、トランザクション識別子情報１０３、優先度定義情報１０４、データベース資源取得予定情報１０５、および、利用可能メモリ領域情報１０６をデータベースタスク制御部１０９に入力し、データベースタスク制御部１０９に処理の開始を指示する。
【０１４０】
ステップ１２１４では、データベース資源競合制御部１０８は、データベース資源競合制御プログラムの処理の完了を通知するメッセージを、トランザクション処理要求受付部１０７に送信し、処理を終了する。
【０１４１】
《データベースタスク制御処理》
図１３Ａ、図１３Ｂ、図１３Ｃ、および、図１３Ｄは、図３で説明したデータベースタスク制御処理（ステップ３０４の処理）の詳細を説明するフローチャートである。
【０１４２】
まずステップ１３００において、データベースタスク制御部１０９は、データベースタスク制御部１０９の処理フェーズに「０」を設定する。  
ステップ１３０１では、データベースタスク制御部１０９は、データベースタスク制御部１０９の処理フェーズが「０」であるか否かを確認する。処理フェーズが「０」である場合は（ステップ１３０１のＹＥＳ）、ステップ１３０２へ進む。処理フェーズが「０」でない場合は（ステップ１３０１のＮＯ）、図１３Ｂのステップ１３２３へ進む。
【０１４３】
ステップ１３０２では、データベースタスク制御部１０９は、データベース資源競合制御部１０８から、データベースタスク制御部１０９の処理の開始を指示するメッセージを受信したか否かを確認する。処理の開始を指示するメッセージを受信した場合は（ステップ１３０２のＹＥＳ）、ステップ１３０３へ進む。処理の開始を指示するメッセージを受信していない場合は（ステップ１３０２のＮＯ）、ステップ１３０５へ進む。
【０１４４】
ステップ１３０３では、データベースタスク制御部１０９は、中止する対象となるトランザクション処理を保持する中止対象トランザクションリスト（ＬＣ）、中断する対象となるトランザクション処理を保持する中断対象トランザクションリスト（ＬＳ）、トランザクション識別子情報１０３、優先度定義情報１０４、データベース資源取得予定情報１０５、および、利用可能メモリ領域情報１０６を、データベース資源競合制御部１０８から受け取る。  
ステップ１３０４では、データベースタスク制御部１０９は、データベースタスク制御部１０９の処理フェーズに「１」を設定し、ステップ１３０１へ戻る。
【０１４５】
ステップ１３０５では、データベースタスク制御部１０９は、データベースタスク１１１からトランザクション処理（ＴＥとする）の完了を通知するメッセージを受信したか否かを確認する。該当メッセージを受信した場合は（ステップ１３０５のＹＥＳ）、ステップ１３０６へ進む。該当メッセージを受信していない場合は（ステップ１３０５のＮＯ）、ステップ１３１０へ進む。
【０１４６】
ステップ１３０６では、データベースタスク制御部１０９は、トランザクション状態管理情報２２４の実行中トランザクション管理リスト（１００１）から、トランザクション処理ＴＥに対応するトランザクション状態管理構造体（ＳＴＥとする）を取り除く。  
ステップ１３０７では、データベースタスク制御部１０９は、トランザクション状態管理構造体ＳＴＥに登録されているデータベースタスク番号の値をＤＢＮ１とする。  
ステップ１３０８では、データベースタスク制御部１０９は、トランザクション状態管理情報２２４のデータベースタスク管理テーブル（１００３）のデータベースタスク番号に登録されている値がＤＢＮ１と一致する二つ組のトランザクション識別子を登録するフィールド（１０１０）に「０」を登録する。
【０１４７】
ステップ１３０９では、データベースタスク制御部１０９は、トランザクション状態管理情報２２４の中断中トランザクション管理リスト（１００２）が保持するトランザクション状態管理構造体のうち、中断要求元トランザクション識別子に登録された値が、トランザクション処理ＴＥのトランザクション識別子と一致するもの全て検出し、それらのトランザクション状態管理構造体の再開可能フラグに「再開可能」を設定し、ステップ１３０１へ戻る。
【０１４８】
ステップ１３１０では、データベースタスク制御部１０９は、トランザクション状態管理情報２２４の中断中トランザクション管理リスト（１００２）が保持するトランザクション状態管理構造体のうち、再開可能フラグが「再開可能」のトランザクション状態管理構造体が存在するか否かを確認する。該当するトランザクション状態管理構造体が存在する場合は（ステップ１３１０のＹＥＳ）、ステップ１３１１へ進む。該当するトランザクション状態管理構造体が存在しない場合は（ステップ１３１０のＮＯ）、ステップ１３０１へ戻る。
【０１４９】
ステップ１３１１では、データベースタスク制御部１０９は、トランザクション状態管理情報２２４の中断中トランザクション管理リスト（１００２）が保持する、再開可能フラグが「再開可能」のトランザクション状態管理構造体のうち、優先度の値が最も大きい（優先度が高い）トランザクション状態管理構造体（ＳＴＨとする）を検出する。
【０１５０】
ステップ１３１２では、データベースタスク制御部１０９は、トランザクション状態管理構造体ＳＴＨのデータベースタスク番号を登録するフィールド（１０１４）に「０」が登録されているか否かを確認する。「０」が登録されている場合は（ステップ１３１２でＹＥＳ）、ステップ１３１３へ進む。「０」が登録されていない場合は（ステップ１３１２でＮＯ）、ステップ１３１４へ進む。
【０１５１】
ステップ１３１３では、データベースタスク制御部１０９は、トランザクション状態管理情報２２４のデータベースタスク管理テーブル（１００３）に、トランザクション識別子を登録するフィールドに「０」が登録されている配列要素が存在するか（トランザクションを未割り当てのデータベースタスクがあるか）否かを確認する。該当する配列要素が存在する（トランザクションを未割り当てのデータベースタスクがある）場合は（ステップ１３１３のＹＥＳ）、ステップ１３１６へ進む。該当する配列要素が存在しない（トランザクションを未割り当てのデータベースタスクがない）場合は（ステップ１３１３のＮＯ）、ステップ１３０１へ戻る。
【０１５２】
ステップ１３１４では、データベースタスク制御部１０９は、トランザクション状態管理構造体ＳＴＨに登録されているデータベースタスク番号に対応するデータベースタスクに対して、トランザクション状態管理構造体ＳＴＨに登録されているトランザクション識別子に対応するトランザクション処理の再開を指示する。  
ステップ１３１５では、データベースタスク制御部１０９は、トランザクション状態管理構造体ＳＴＨを中断中トランザクション管理リスト（１００２）から取り除き、実行中トランザクション管理リスト（１００１）に追加し、ステップ１３０１へ戻る。  
ステップ１３１６では、データベースタスク制御部１０９は、トランザクション状態管理構造体ＳＴＨに登録されているトランザクション識別子に対応するトランザクション処理をＴＲとする。
【０１５３】
ステップ１３１７では、データベースタスク制御部１０９は、コンテキスト退避領域１１３からトランザクション処理ＴＲと対応するデータベースタスクコンテキストを読み出し、トランザクション状態管理情報２２４のデータベースタスク管理テーブル（１００３）でトランザクション識別子を登録するフィールドに「０」が登録されている配列要素のデータベースタスク番号に対応するデータベースタスクに、読み出したデータベースタスクコンテキストを復旧する。  
ステップ１３１８では、データベースタスク制御部１０９は、トランザクション処理ＴＲと対応するデータベースタスクコンテキストをコンテキスト退避領域１１３から削除する。  
ステップ１３１９では、データベースタスク制御部１０９は、トランザクション処理ＴＲと対応するデータベースタスクコンテキストを復旧したデータベースタスクに対して、トランザクション処理ＴＲの再開を指示する。  
ステップ１３２０では、データベースタスク制御部１０９は、トランザクション状態管理構造体ＳＴＨを中断中トランザクション管理リスト（１００２）から取り除き、実行中トランザクション管理リスト（１００１）に追加する。
【０１５４】
ステップ１３２１では、データベースタスク制御部１０９は、トランザクション状態管理構造体ＳＴＨのデータベースタスク番号を登録するフィールド（１０１４）に、トランザクション処理ＴＲと対応するデータベースタスクコンテキストを復旧したデータベースタスクのデータベースタスク番号（ＤＢＮ２とする）を登録する。  
ステップ１３２２では、データベースタスク制御部１０９は、トランザクション状態管理情報２２４のデータベースタスク管理テーブル（１００３）のデータベースタスク番号を登録するフィールド（１００９）に登録された値がＤＢＮ２と一致する配列要素のトランザクション識別子を登録するフィールド（１０１０）に、トランザクション処理ＴＲのトランザクション識別子を登録し、ステップ１３０１へ戻る。
【０１５５】
ステップ１３２３では、データベースタスク制御部１０９の処理フェーズが「１」であるか否かを確認する。処理フェーズが「１」である場合は（ステップ１３２３のＹＥＳ）、ステップ１３２４へ進む。処理フェーズが「１」でない場合は（ステップ１３２３のＮＯ）、図１３Ｄのステップ１３６７へ進む。
【０１５６】
図１３Ｂのステップ１３２４では、データベースタスク制御部１０９は、データベース資源競合制御部１０８から受け取った中止する対象となるトランザクション処理を保持する中止対象トランザクションリストＬＣが空（トランザクション処理が含まれていない）か否かを確認する。空の（トランザクション処理が含まれていない）場合は（ステップ１３２４のＹＥＳ）、図１３Ｃのステップ１３４８へ進む。空でない（トランザクション処理が含まれている）場合は（ステップ１３２４のＮＯ）、ステップ１３２５へ進む。  
ステップ１３２５では、データベースタスク制御部１０９は、中止対象トランザクションリストＬＣから、中止する対象となるトランザクション処理（ＴＣとする）を一つ選択する。
【０１５７】
ステップ１３２６では、データベースタスク制御部１０９は、トランザクション状態管理情報２２４を参照し、トランザクション処理ＴＣのトランザクション識別子を、トランザクション識別子を記述するフィールド（１０１１）に登録されているトランザクション状態管理構造体が中断中トランザクション管理リスト（１００２）に存在するか（トランザクション処理ＴＣが中断中か）否かを確認する。該当するトランザクション状態管理構造体が存在する（トランザクション処理ＴＣが中断中の）場合は（ステップ１３２６のＹＥＳ）、ステップ１３２９へ進む。該当するトランザクション状態管理構造体が存在しない（トランザクション処理ＴＣが中断中でない）場合は（ステップ１３２６のＮＯ）、ステップ１３２７へ進む。  
ステップ１３２７では、データベースタスク制御部１０９は、トランザクション処理ＴＣのトランザクション識別子を持つトランザクション状態管理構造体のデータベースタスク番号を登録するフィールドに登録されているデータベース番号に対応するデータベースタスクに対して、トランザクション処理ＴＣの中止を指示する。
【０１５８】
ステップ１３２８では、データベースタスク制御部１０９は、データベースタスク制御部１０９の処理フェーズに「２」を設定し、ステップ１３０１へ戻る。  
ステップ１３２９では、データベースタスク制御部１０９は、トランザクション処理ＴＣのトランザクション識別子を持つトランザクション状態管理構造体のデータベースタスク番号を登録するフィールド（１０１４）に「０」が登録されているか否かを確認する。フィールド（１０１４）に「０」が登録されている場合は（ステップ１３２９のＹＥＳ）、ステップ１３３０へ進む。フィールド（１０１４）に「０」が登録されていない場合は（ステップ１３２９のＮＯ）、ステップ１３３１へ進む。
【０１５９】
ステップ１３３０では、データベースタスク制御部１０９は、トランザクション状態管理情報２２４のデータベースタスク管理テーブル（１００３）に、トランザクション識別子を登録するフィールドに「０」が登録されている配列要素が存在するか否かを確認する。該当する配列要素が存在する場合は（ステップ１３３０のＹＥＳ）、ステップ１３３２へ進む。該当する配列要素が存在しない場合は（ステップ１３３０のＮＯ）、ステップ１３３１へ進む。
【０１６０】
ステップ１３３１では、データベースタスク制御部１０９は、トランザクション状態管理情報２２４を参照し、データベースタスク管理テーブル（１００３）の各配列要素のトランザクション識別子を登録するフィールド（１０１０）に登録されているトランザクション識別子を、トランザクション識別子を登録するフィールド（１０１１）に持つトランザクション状態管理構造体の中で、優先度の値（１０１２）が最も小さい（優先度が低い）トランザクション状態管理構造体を検出し、そのトランザクション状態管理構造体に登録されているトランザクション識別子に対応するトランザクション処理をＴＬとし、ステップ１３３７へ進む。
【０１６１】
ステップ１３３７では、データベースタスク制御部１０９は、トランザクション状態管理情報２２４を参照し、トランザクション処理ＴＬのトランザクション識別子を持つトランザクション状態管理構造体が、中断中トランザクション管理リストに含まれているか（トランザクション処理ＴＬが中断中か）否かを確認する。該当するトランザクション状態管理構造体が存在する（トランザクション処理ＴＬが中断中の）場合は（ステップ１３３７のＹＥＳ）、ステップ１３３８へ進む。該当するトランザクション状態管理構造体が存在しない（トランザクション処理ＴＬが中断中でない）場合は（ステップ１３３７のＮＯ）、ステップ１３４５へ進む。
【０１６２】
ステップ１３３２では、データベースタスク制御部１０９は、コンテキスト退避領域１１３からトランザクション処理ＴＣと対応するデータベースタスクコンテキストを読み出し、トランザクション状態管理情報２２４のデータベースタスク管理テーブル（１００３）でトランザクション識別子を登録するフィールドに「０」が登録されている配列要素のデータベースタスク番号に対応するデータベースタスクに、読み出したデータベースタスクコンテキストを復旧する。
【０１６３】
ステップ１３３３では、データベースタスク制御部１０９は、トランザクション処理ＴＣと対応するデータベースタスクコンテキストをコンテキスト退避領域１１３から削除する。  
ステップ１３３５では、データベースタスク制御部１０９は、トランザクション処理ＴＣと対応するデータベースタスクコンテキストを復旧したデータベースタスクに対して、トランザクション処理ＴＲの再開を指示する。  
ステップ１３３５では、データベースタスク制御部１０９は、トランザクション処理ＴＲの再開を指示したデータベースタスクに対して、トランザクション処理ＴＲの中止を指示する。  
ステップ１３３６では、データベースタスク制御部１０９は、データベースタスク制御部１０９の処理フェーズに「２」を設定し、ステップ１３０１へ戻る。  
ステップ１３３８では、データベースタスク制御部１０９は、データベースタスク制御部１０９の処理フェーズに「３」を設定する。
【０１６４】
ステップ１３３９では、データベースタスク制御部１０９は、トランザクション処理ＴＬのトランザクション識別子を持つトランザクション状態管理構造体のデータベースタスク番号を登録するフィールド（１０１４）に登録されたデータベースタスク番号に対応するデータベースタスク（ＤＢとする）のデータベースタスクコンテキストを、コンテキスト待機領域２２７に退避する。  
ステップ１３４０では、データベースタスク制御部１０９は、データベースタスクＤＢを初期化する。  
ステップ１３４１では、データベースタスク制御部１０９は、コンテキスト退避領域１１３からトランザクション処理ＴＣと対応するデータベースタスクコンテキストを読み出し、データベースタスクＤＢにデータベースタスクコンテキストを復旧する。
【０１６５】
ステップ１３４２では、データベースタスク制御部１０９は、トランザクション処理ＴＣと対応するデータベースタスクコンテキストをコンテキスト退避領域１１３から削除する。  
ステップ１３４３では、データベースタスク制御部１０９は、データベースタスクＤＢに対して、トランザクション処理ＴＲの再開を指示する。  
ステップ１３４４では、データベースタスク制御部１０９は、データベースタスク制御部１０９は、データベースタスクＤＢに対して、トランザクション処理ＴＲの中止を指示し、ステップ１３０１へ戻る。  
ステップ１３４５では、データベースタスク制御部１０９は、データベースタスク制御部１０９の処理フェーズに「４」を設定する。
【０１６６】
ステップ１３４６では、データベースタスク制御部１０９は、トランザクション処理ＴＬのトランザクション識別子を持つトランザクション状態管理構造体のデータベースタスク番号を登録するフィールド（１０１４）に登録されたデータベースタスク番号に対応するデータベースタスクに対して、トランザクション処理ＴＬの中断を指示する。
【０１６７】
ステップ１３４７では、データベースタスク制御部１０９は、データベースタスク１１１から、トランザクション処理ＴＬの中断完了を通知するメッセージを受信したか確認する。メッセージを受信した場合は（ステップ１３４７のＹＥＳ）、ステップ１３３９へ進む。メッセージを受信していない場合はステップ１３４７のＮＯ）、ステップ１３４７へ戻って繰り返す。
【０１６８】
図１３Ｃのステップ１３４８では、データベースタスク制御部１０９は、データベース資源競合制御部１０８から受け取った中断する対象となるトランザクション処理を保持する中断対象トランザクションリストＬＳが空（トランザクション処理が含まれていない）か否かを確認する。空の（トランザクション処理が含まれていない）場合は（ステップ１３４８のＹＥＳ）、ステップ１３５１へ進む。空でない（トランザクション処理が含まれている）場合は（ステップ１３４８のＮＯ）、ステップ１３４９へ進む。
【０１６９】
ステップ１３４９では、データベースタスク制御部１０９は、中断対象トランザクションリストＬＳから中断する対象となるトランザクション処理（ＴＳとする）を１つ選択し、トランザクション状態管理情報２２４を参照し、トランザクション処理ＴＳのトランザクション識別子を持つトランザクション状態管理構造体のデータベースタスク番号を登録するフィールドに登録されているデータベース番号に対応するデータベースタスクに対して、トランザクション処理ＴＳの中断を指示する。
【０１７０】
ステップ１３５０では、データベースタスク制御部１０９は、データベースタスク制御部１０９の処理フェーズに「２」を設定し、ステップ１３０１へ戻る。  
ステップ１３５１では、データベースタスク制御部１０９は、トランザクション状態管理情報２２４のデータベースタスク管理テーブル（１００３）に、トランザクション識別子を登録するフィールドに「０」が登録されている配列要素が存在するか否かを確認する。該当する配列要素が存在する場合は（ステップ１３５１のＹＥＳ）、ステップ１３５２へ進む。該当する配列要素が存在しない場合は（ステップ１３５１のＮＯ）、ステップ１３５３へ進む。
【０１７１】
ステップ１３５２では、データベースタスク制御部１０９は、トランザクション状態管理情報２２４のデータベースタスク管理テーブル（１００３）にあるトランザクション識別子を登録するフィールドに「０」を登録している配列要素を１つ選び、その配列要素のデータベースタスク番号を登録するフィールド（１００９）に登録されているデータベースタスク番号に対応するデータベースタスクに、トランザクション識別子情報１０３、優先度定義情報１０４、データベース資源取得予定情報１０５、および、利用可能メモリ領域情報１０６によるトランザクション処理を割り当て、ステップ１３６３へ進む。
【０１７２】
ステップ１３５３では、データベースタスク制御部１０９は、利用可能メモリ領域情報１０６に有効なメモリアドレスとメモリ領域サイズの記述があるか否かを確認する。有効な記述がある場合は（ステップ１３５３のＹＥＳ）、ステップ１３５４へ進む。有効な記述がない場合は（ステップ１３５３のＮＯ）、ステップ１３５７へ進む。
【０１７３】
ステップ１３５４では、データベースタスク制御部１０９は、利用可能メモリ領域情報１０６のメモリアドレスを記述するフィールド（８０１）に記述されたメモリアドレスから始まる共用ヒープメモリ２０８内のメモリ領域に、新たにデータベースタスク（ＤＢＴとする）を生成する。
【０１７４】
ステップ１３５５では、データベースタスク制御部１０９は、共用ヒープメモリ２０８内のメモリ領域に生成したデータベースタスクＤＢＴに、トランザクション識別子情報１０３、優先度定義情報１０４、データベース資源取得予定情報１０５、および、利用可能メモリ領域情報１０６によるトランザクション処理を割り当てる。
【０１７５】
ステップ１３５６では、データベースタスク制御部１０９は、トランザクション識別子情報１０３に記述されたトランザクション識別子、優先度定義情報１０４に記述された優先度の値、データベース資源取得予定情報１０５に記述されたデータベースキャッシュメモリの値（所領量）を、それぞれ、トランザクション識別子を登録するフィールド（１０１１）、優先度の値を登録するフィールド（１０１２）、データベースキャッシュサイズを登録するフィールド（１０１３）に持つトランザクション状態管理構造体（ＳＴＮとする）を生成し、トランザクション状態管理構造体ＳＴＮのデータベースタスク番号を登録するフィールド（１０１４）、中断要求元トランザクション識別子を登録するフィールド（１０１５）、および、再開可能フラグを登録するフィールド（１０１６）に全て「０」を登録し、トランザクション状態管理構造体ＳＴＮを実行中トランザクション管理リストに追加し、ステップ１３６６へ進む。
【０１７６】
このように、利用可能メモリ領域情報１０６に有効なメモリアドレスが記述されているか否かを判断し、記述されている場合には積極的に主記憶装置２０６を利用してアプリケーションプログラム２１１から指示されたトランザクション処理を実行するデータベースタスク１１１を生成するので、処理を高速に実行することができる。
【０１７７】
ステップ１３５７では、データベースタスク制御部１０９は、トランザクション状態管理情報２２４の中断中トランザクション管理リスト（１００２）にある、データベースタスク番号が「０」でないトランザクション状態管理構造体のうち、優先度の値が最も小さい（優先度が低い）トランザクション状態管理構造体（ＳＴＳとする）を検出する。
【０１７８】
ステップ１３５８では、データベースタスク制御部１０９は、トランザクション状態管理構造体ＳＴＳのデータベースタスク番号を登録するフィールド（１０１４）に登録されたデータベースタスク番号（ＤＢＮ３とする）に対応するデータベースタスクのデータベースタスクコンテキストを、コンテキスト待機領域２２７に退避する。
【０１７９】
ステップ１３５９では、データベースタスク制御部１０９は、データベースタスク番号ＤＢＮ３に対応するデータベースタスクを初期化する。  
ステップ１３６０では、データベースタスク制御部１０９は、トランザクション状態管理情報２２４のデータベースタスク管理テーブル（１００３）のデータベースタスク番号に登録されている値がＤＢＮ３と一致する二つ組のトランザクション識別子を登録するフィールド（１０１０）に「０」を登録する。  
ステップ１３６１では、データベースタスク制御部１０９は、トランザクション状態管理構造体ＳＴＳのデータベースタスク番号を登録するフィールド（１０１４）に「０」を登録する。
【０１８０】
ステップ１３６２では、データベースタスク制御部１０９は、データベース番号がＤＢＮ３に対応するデータベースタスクに、トランザクション識別子情報１０３、優先度定義情報１０４、データベース資源取得予定情報１０５、および、利用可能メモリ領域情報１０６によるトランザクション処理を割り当てる。
【０１８１】
ステップ１３６３では、データベースタスク制御部１０９は、トランザクション識別子情報１０３に記述されたトランザクション識別子、優先度定義情報１０４に記述された優先度の値、データベース資源取得予定情報１０５に記述されたデータベースキャッシュメモリの値（所領量）を、それぞれ、トランザクション識別子を登録するフィールド（１０１１）、優先度の値を登録するフィールド（１０１２）、データベースキャッシュサイズを登録するフィールド（１０１３）に持つトランザクション状態管理構造体（ＳＴＮとする）を生成し、トランザクション状態管理構造体ＳＴＮの中断要求元トランザクション識別子を登録するフィールド（１０１５）、および、再開可能フラグを登録するフィールド（１０１６）に全て「０」を登録し、トランザクション状態管理構造体ＳＴＮを実行中トランザクション管理リストに追加する。
【０１８２】
ステップ１３６４では、データベースタスク制御部１０９は、トランザクション状態管理構造体ＳＴＮのデータベースタスク番号を登録するフィールド（１０１４）に、データベース番号ＤＢＮ３を登録する。  
ステップ１３６５では、データベースタスク制御部１０９は、トランザクション状態管理情報２２４のデータベースタスク管理テーブル（１００３）のデータベースタスク番号を登録するフィールド（１００９）に登録された値がＤＢＮ３と一致する配列要素のトランザクション識別子を登録するフィールド（１０１０）に、トランザクション識別子情報１０３に記述されたトランザクション識別子を登録する。
【０１８３】
ステップ１３６６では、データベースタスク制御部１０９は、データベースタスク制御部１０９の処理フェーズに「０」を設定し、ステップ１３０１へ戻る。  
図３Ｄのステップ１３６７では、データベースタスク制御部１０９は、データベースタスク制御部１０９の処理フェーズが「２」であるか否かを確認する。処理フェーズが「２」である場合は（ステップ１３６７のＹＥＳ）、ステップ１３６８へ進む。処理フェーズが「２」でない場合は（ステップ１３６７のＮＯ）、ステップ１３７６へ進む。
【０１８４】
ステップ１３６８では、データベースタスク制御部１０９は、データベースタスク１１１からトランザクション処理（ＴＣＦとする）の中止完了を通知するメッセージを受信したか否かを確認する。該当メッセージを受信した場合は（ステップ１３６８のＹＥＳ）、ステップ１３６９へ進む。該当メッセージを受信していない場合は（ステップ１３６８のＮＯ）、ステップ１３７２へ進む。
【０１８５】
ステップ１３６９では、データベースタスク制御部１０９は、トランザクション状態管理情報２２４の実行中トランザクション管理リスト（１００１）から、トランザクション処理ＴＣＦに対応するトランザクション状態管理構造体を取り除く。  
ステップ１３７０では、データベースタスク制御部１０９は、中止対象トランザクションリストＬＣから、トランザクション処理ＴＣＦを削除する。
【０１８６】
ステップ１３７１では、データベースタスク制御部１０９は、データベースタスク制御部１０９の処理フェーズに「１」を設定し、ステップ１３０１へ戻る。  
ステップ１３７２では、データベースタスク制御部１０９は、データベースタスク１１１からトランザクション処理（ＴＳＦとする）の中断完了を通知するメッセージを受信したか否かを確認する。該当メッセージを受信した場合は（ステップ１３７２のＹＥＳ）、ステップ１３７３へ進む。該当メッセージを受信していない場合は（ステップ１３７２のＮＯ）、ステップ１３０１へ戻る。
【０１８７】
ステップ１３７３では、データベースタスク制御部１０９は、トランザクション状態管理情報２２４の実行中トランザクション管理リスト（１００１）から、トランザクション処理ＴＳＦに対応するトランザクション状態管理構造体を取り除き、中断中トランザクション管理リスト（１００２）に追加する。  
ステップ１３７４では、データベースタスク制御部１０９は、中断対象トランザクションリストＬＳから、トランザクション処理ＴＳＦを削除する。
【０１８８】
ステップ１３７５では、データベースタスク制御部１０９は、データベースタスク制御部１０９の処理フェーズに「１」を設定し、ステップ１３０１へ戻る。  
ステップ１３７６では、データベースタスク制御部１０９は、データベースタスク制御部１０９の処理フェーズが「３」または「４」であるか否かを確認する。処理フェーズが「３」または「４」である場合は（ステップ１３７６のＹＥＳ）、ステップ１３７７へ進む。処理フェーズが「３」または「４」でない場合は（ステップ１３７６のＮＯ）、ステップ１３８５へ進む。
【０１８９】
ステップ１３７７では、データベースタスク制御部１０９は、データベースタスク１１１からトランザクション処理（ＴＦとする）の中止完了を通知するメッセージを受信したか否かを確認する。該当メッセージを受信した場合は（ステップ１３７７のＹＥＳ）、ステップ１３７８へ進む。該当メッセージを受信していない場合は（ステップ１３７７のＮＯ）、ステップ１３０１へ戻る。  
ステップ１３７８では、データベースタスク制御部１０９は、トランザクション状態管理情報２２４の実行中トランザクション管理リスト（１００１）から、トランザクション処理ＴＦに対応するトランザクション状態管理構造体を取り除く。
【０１９０】
ステップ１３７９では、データベースタスク制御部１０９は、コンテキスト退避領域１１３からトランザクション処理ＴＬと対応するデータベースタスクコンテキストを読み出し、トランザクション処理ＴＦに対応するトランザクション状態管理構造体のデータベースタスク番号を登録するフィールド（１０１４）に登録されていたデータベースタスク番号に対応するデータベースタスクに復旧する。  
ステップ１３８０では、データベースタスク制御部１０９は、トランザクション処理ＴＬに対応するデータベースタスクコンテキストをコンテキスト退避領域１１３から削除する。
【０１９１】
ステップ１３８１では、データベースタスク制御部１０９は、データベースタスク制御部１０９の処理フェーズが「４」であるか否かを確認する。処理フェーズが「４」である場合は（ステップ１３８１のＹＥＳ）、ステップ１３８２へ進む。処理フェーズが「４」でない場合は（ステップ１３８１のＮＯ）、ステップ１３８３へ進む。
【０１９２】
ステップ１３８２では、データベースタスク制御部１０９は、トランザクション処理ＴＬのトランザクション識別子を持つトランザクション状態管理構造体のデータベースタスク番号を登録するフィールド（１０１４）に登録されたデータベースタスク番号に対応するデータベースタスクに対して、トランザクション処理ＴＬの再開を指示する。  
ステップ１３８３では、データベースタスク制御部１０９は、中断対象トランザクションリストＬＳから、トランザクション処理ＴＦを削除する。
【０１９３】
ステップ１３８４では、データベースタスク制御部１０９は、データベースタスク制御部１０９の処理フェーズに「１」を設定し、ステップ１３０１へ戻る。  
ステップ１３８５では、データベースタスク制御部１０９は、データベースタスク制御部１０９の処理を停止する指示を受信したか否かを確認する。処理停止の指示を受信した場合は（ステップ１３８５のＹＥＳ）、データベースタスク制御部１０９の処理を終了する。処理停止の指示を受信していない場合は（ステップ１３８５のＹＥＳ）、ステップ１３０１へ戻る。
【０１９４】
以上の説明において、実行中トランザクション管理リストからトランザクション状態管理構造体を取り除くとは、以下のことを表す。
【０１９５】
（ａ）取り除く対象のトランザクション状態管理構造体が実行中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００４）からポインタ（１０１７）で参照されており、かつ、実行中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００４）をポインタ（１０１９）で参照している場合、実行中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００４）から取り除く対象のトランザクション状態管理構造体へのポインタ（１０１７）と、取り除く対象のトランザクション状態管理構造体から実行中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００４）へのポインタ（１０１９）を削除する。
【０１９６】
（ｂ）取り除く対象のトランザクション状態管理構造体が実行中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００４）からポインタ（１０１７）で参照されており、かつ、別のトランザクション状態管理構造体をポインタ（１０１８）で参照している場合、実行中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００４）から取り除く対象のトランザクション状態管理構造体へのポインタ（１０１７）と、取り除く対象のトランザクション状態管理構造体から別のトランザクション状態管理構造体へのポインタ（１０１８）を削除し、実行中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００４）から、取り除く対象のトランザクション状態管理構造体を取り除く前に取り除く対象のトランザクション状態管理構造体からポインタで参照されていた別のトランザクション状態管理構造体へのポインタ（１０１７）を生成する。
【０１９７】
（ｃ）取り除く対象のトランザクション状態管理構造体が別のトランザクション状態管理構造体からポインタ（１０１８）で参照され、かつ、別のトランザクション状態管理構造体をポインタ（１０１８）で参照している場合、別のトランザクション状態管理構造体から取り除く対象のトランザクション状態管理構造体へのポインタと、取り除く対象のトランザクション状態管理構造体から別のトランザクション状態管理構造体へのポインタを削除し、取り除く対象のトランザクション状態管理構造体をポインタで参照していた別のトランザクション状態管理構造体から、取り除く対象のトランザクション状態管理構造体がポインタで参照していた別のトランザクション状態管理構造体へのポインタを生成する。
【０１９８】
（ｄ）取り除く対象のトランザクション状態管理構造体が別のトランザクション状態管理構造体からポインタ（１０１８）で参照され、かつ、実行中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００４）をポインタ（１０１９）で参照している場合、別のトランザクション状態管理構造体から取り除く対象のトランザクション状態管理構造体へのポインタと、取り除く対象のトランザクション状態管理構造体から実行中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００４）へのポインタ（１０１９）を削除し、取り除く対象のトランザクション状態管理構造体を取り除く前に取り除く対象のトランザクション状態管理構造体をポインタで参照していた別のトランザクション状態管理構造体から、実行中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００４）へのポインタを生成する。
【０１９９】
また中断中トランザクション管理リストからトランザクション状態管理構造体を取り除くとは、以下のことを表す。
【０２００】
（ａ）取り除く対象のトランザクション状態管理構造体が中断中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００７）からポインタ（１０２０）で参照されており、かつ、中断中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００７）をポインタ（１０２１）で参照している場合、中断中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００７）から取り除く対象のトランザクション状態管理構造体へのポインタ（１０２０）と、取り除く対象のトランザクション状態管理構造体から中断中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００７）へのポインタ（１０２１）を削除する。
【０２０１】
（ｂ）取り除く対象のトランザクション状態管理構造体が中断中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００７）からポインタ（１０２０）で参照されており、かつ、別のトランザクション状態管理構造体をポインタで参照している場合、中断中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００７）から取り除く対象のトランザクション状態管理構造体へのポインタ（１０２０）と、取り除く対象のトランザクション状態管理構造体から別のトランザクション状態管理構造体へのポインタを削除し、中断中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００７）から、取り除く対象のトランザクション状態管理構造体を取り除く前に取り除く対象のトランザクション状態管理構造体からポインタで参照されていた別のトランザクション状態管理構造体へのポインタ（１０２０）を生成する。
【０２０２】
（ｃ）取り除く対象のトランザクション状態管理構造体が別のトランザクション状態管理構造体からポインタで参照され、かつ、別のトランザクション状態管理構造体をポインタで参照している場合、別のトランザクション状態管理構造体から取り除く対象のトランザクション状態管理構造体へのポインタと、取り除く対象のトランザクション状態管理構造体から別のトランザクション状態管理構造体へのポインタを削除し、取り除く対象のトランザクション状態管理構造体をポインタで参照していた別のトランザクション状態管理構造体から、取り除く対象のトランザクション状態管理構造体がポインタで参照していた別のトランザクション状態管理構造体へのポインタを生成する。
【０２０３】
（ｄ）取り除く対象のトランザクション状態管理構造体が別のトランザクション状態管理構造体からポインタで参照され、かつ、中断中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００７）をポインタ（１０２１）で参照している場合、別のトランザクション状態管理構造体から取り除く対象のトランザクション状態管理構造体へのポインタと、取り除く対象のトランザクション状態管理構造体から中断中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００７）へのポインタ（１０２１）を削除し、取り除く対象のトランザクション状態管理構造体を取り除く前に取り除く対象のトランザクション状態管理構造体をポインタで参照していた別のトランザクション状態管理構造体から、中断中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００７）へのポインタを生成する。
【０２０４】
また実行中トランザクション管理リストにトランザクション状態管理構造体を追加するとは、以下のことを表す。  
追加対象のトランザクション状態管理構造体を追加する前に、実行中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００４）からトランザクション状態管理構造体へのポインタ（１０１７）を削除し、実行中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００４）から追加対象のトランザクション状態管理構造体へのポインタと、追加対象のトランザクション状態管理構造体から、追加対象のトランザクション状態管理構造体を追加する前に実行中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００４）からポインタ（１０１７）で参照されていたトランザクション状態管理構造体へのポインタを生成する。
【０２０５】
また中断中トランザクション管理リストにトランザクション状態管理構造体を追加するとは、以下のことを表す。  
追加対象のトランザクション状態管理構造体を追加する前に、中断中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００７）からトランザクション状態管理構造体へのポインタ（１０２０）を削除し、中断中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００７）から追加対象のトランザクション状態管理構造体へのポインタと、追加対象のトランザクション状態管理構造体から、追加対象のトランザクション状態管理構造体を追加する前に中断中トランザクション管理リストの先頭を参照するポインタを保持する領域（１００７）からポインタ（１０２０）で参照されていたトランザクション状態管理構造体へのポインタを生成する。
【０２０６】
またデータベースタスクコンテキストを退避するとは、データベースタスクのレジスタ情報、実行時スタック情報、および、大域変数領域情報からなるデータベースタスクコンテキストを生成し、ストレージデバイス２０７内に格納することである。
【０２０７】
またデータベースタスクコンテキストを復旧するとは、ストレージデバイス２０７内からデータベースタスクコンテキストを読み込み、データベースタスクコンテキストのレジスタ情報が保持する各レジスタの値を対応するレジスタに設定し、実行時スタック情報に含まれる実行時スタックのスナップショットをデータベースタスクの実行時スタックを保持するメモリ領域に複製し、および、大域変数領域情報に含まれる大域変数領域のスナップショットをデータベースタスクの大域変数領域を保持するメモリ領域に複製することである。
【０２０８】
またデータベースタスクの初期化とは、データベースタスクの実行時スタックと大域変数領域を保持するメモリ領域の内容を、データベースタスクの処理開始時と同じ内容に戻すことである。
【０２０９】
またデータベースタスクにトランザクション処理を割り当てるとは、アプリケーションプログラム２１１から入力されたトランザクション識別子情報１０３に記述されたトランザクション識別子と、優先度定義情報１０４に記述された優先度の値を持ち、データベース資源取得予定情報１０５に記述されたデータベース資源を取得することができるトランザクション処理の実行開始を、データベースタスクに対して指示することである。
【０２１０】
また利用可能メモリ情報に記述されたメモリアドレスとメモリ領域サイズが有効であるとは、利用可能メモリ情報２１６のメモリ領域の先頭アドレスを記述するフィールド（８０１）の記述が「ｎ／ａ」でなく、かつ、メモリ領域のサイズを記述するフィールド（８０２）の記述が「０」でないことを表す。
【０２１１】
《データベースタスク処理》
図１４Ａ、および、図１４Ｂは、図２で説明したデータベースタスク処理の処理手順を示すフローチャートである。
【０２１２】
まずステップ１４００において、データベースタスク１１１は、データベースタスク１１１の処理フェーズに「０」を設定する。  
次にステップ１４０１において、データベースタスク１１１は、データベースタスク制御部１０９からトランザクション処理の実行を要求するメッセージを受信したか否かを確認する。該当メッセージを受信した場合は（ステップ１４０１のＹＥＳ）、ステップ１４０２へ進む。該当メッセージを受信していない場合は（ステップ１４０１のＮＯ）、ステップ１４０９へ進む。
【０２１３】
ステップ１４０２では、データベースタスク１１１は、データベースタスク１１１の処理フェーズが「０」である否かを確認する。処理フェーズが「０」である場合は（ステップ１４０２のＹＥＳ）、ステップ１４０４へ進む。処理フェーズが「０」でない場合は（ステップ１４０２のＮＯ）、ステップ１４０３へ進む。  
ステップ１４０３では、データベースタスク１１１は、トランザクション処理中であるため、新たなトランザクション処理を受け付けられないことを通知するメッセージを、データベースタスク制御部１０９に送信し、ステップ１４０１へ戻る。  
ステップ１４０４では、データベースタスク１１１は、データベースタスク制御部１０９から、トランザクション識別子情報１０３に記述されたトランザクション識別子（Ｔとする）を入力として、トランザクション処理要求を受け付ける。
【０２１４】
ステップ１４０５では、データベースタスク１１１は、トランザクションプロファイル情報１１４のトランザクション識別子を記述するフィールド（１１０１）に、トランザクション識別子Ｔが存在するか否かを確認する。トランザクション識別子Ｔが存在する場合は（ステップ１４０５のＹＥＳ）、ステップ１４０６へ進む。トランザクション識別子Ｔが存在しない場合は（ステップ１４０５のＮＯ）、ステップ１４０７へ進む。  
ステップ１４０６では、データベースタスク１１１は、データベースタスク１１１の処理フェーズに「１Ａ」を設定し、ステップ１４０１へ戻る。  
ステップ１４０７では、データベースタスク１１１は、トランザクションプロファイル情報１１４のトランザクション識別子を記述するフィールド（１１０１）にトランザクション識別子Ｔを追加し、トランザクション識別子を記述するフィールド（１１０１）がトランザクション識別子Ｔの四つ組を生成する。
【０２１５】
ステップ１４０８では、データベースタスク１１１は、データベースタスク１１１の処理フェーズに「１Ｂ」を設定し、ステップ１４０１へ戻る。  
ステップ１４０９では、データベースタスク１１１は、データベースタスク１１１の処理フェーズが「１Ａ」または「１Ｂ」であるか否かを確認する。処理フェーズが「１Ａ」または「１Ｂ」である場合は（ステップ１４０９のＹＥＳ）、ステップ１４１０へ進む。処理フェーズが「１Ａ」または「１Ｂ」でない場合は（ステップ１４０９のＮＯ）、ステップ１４２１へ進む。
【０２１６】
ステップ１４１０では、データベースタスク１１１は、アプリケーションプログラム２１１から要求されたトランザクション処理に含まれる問い合わせ処理のうち、未処理の問い合わせ処理が存在するか否かを確認する。未処理の問い合わせ処理が存在する場合は（ステップ１４１０のＹＥＳ）、ステップ１４１２へ進む。未処理の問い合わせ処理が存在しない場合は（ステップ１４１０のＮＯ）、ステップ１４１１へ進む。  
ステップ１４１１では、データベースタスク１１１は、データベースタスク１１１の処理フェーズに「２」を設定し、ステップ１４０１へ戻る。
【０２１７】
ステップ１４１２では、データベースタスク１１１は、アプリケーションプログラム２１１から要求されたトランザクション処理に含まれる未処理の問い合わせ処理のうち、問い合わせ処理を行う順番に従って一番先に行う問い合わせ処理（Ｑとする）を取得する。  
ステップ１４１３では、データベースタスク１１１は、問い合わせ処理Ｑの内容がデータベース１１６内にテーブルの生成であるか否かを確認する（ステップ１４１３）。問い合わせ処理Ｑの内容がテーブルの生成である場合は（ステップ１４１３のＹＥＳ）、ステップ１４１４へ進む。問い合わせ処理Ｑの内容がテーブルの生成でない場合は（ステップ１４１３のＮＯ）、ステップ１４１５へ進む。
【０２１８】
ステップ１４１４では、データベースタスク１１１は、データベース構成情報１１５において、問い合わせ処理Ｑによるテーブルが生成されるデータベースの名称が記述されたデータベースの名称を記述するフィールド（４０１）に対応するテーブルの名称を記述するフィールド（４０３）に、問い合わせ処理Ｑにより生成されるテーブルの名称を記述する。  
ステップ１４１５では、データベースタスク１１１は、問い合わせ処理Ｑを実行する。
【０２１９】
問い合わせ処理Ｑの実行の結果をアプリケーションプログラム２１１に送信する（ステップ１４１６）。  
ステップ１４１７では、データベースタスク１１１は、データベースタスク１１１の処理フェーズが「１Ａ」であるか否かを確認する。処理フェーズが「１Ａ」である場合は（ステップ１４１７のＹＥＳ）、ステップ１４２０へ進む。処理フェーズが「１Ａ」でない場合は（ステップ１４１７のＮＯ）、ステップ１４１８へ進む。
【０２２０】
ステップ１４１８では、データベースタスク１１１は、トランザクションプロファイル情報１１４のトランザクション識別子を記述するフィールド（１１０１）がトランザクション識別子Ｔの四つ組のアクセスする対象のテーブルを記述するフィールド（１１０２）に、問い合せ処理Ｑの実行中にアクセスしたテーブルの名称を追加して記述する。  
ステップ１４１９では、データベースタスク１１１は、トランザクションプロファイル情報１１４のトランザクション識別子を記述するフィールド（１１０１）がトランザクション識別子Ｔの四つ組の共有ロックを取得したデータベースオブジェクトを記述するフィールド（１１０４）と排他ロックを取得したデータベースオブジェクトを記述するフィールド（１１０５）に、問い合せ処理Ｑの実行中に共有ロックおよび排他ロックを取得したデータベースオブジェクトの名称を、それぞれ追加して記述する。
【０２２１】
ステップ１４２０では、データベースタスク１１１は、データベースタスク１１１の処理フェーズに「０」を設定し、１４０１へ戻る。  
ステップ１４２１では、データベースタスク１１１は、データベースタスク１１１の処理フェーズが「２」であるか否かを確認する。処理フェーズが「２」である場合は（ステップ１４２１のＹＥＳ）、ステップ１４２２へ進む。処理フェーズが「２」でない場合は（ステップ１４２１のＮＯ）、ステップ１４２３へ進む。  
ステップ１４２２では、データベースタスク１１１は、トランザクション処理の実行完了を通知するメッセージを、データベースタスク制御部１０９に送信し、データベースタスク１１１の処理を終了する。  
ステップ１４２３では、データベースタスク１１１は、データベースタスク制御部１０９からトランザクション処理の中止を要求するメッセージを受信したか否かを確認する。該当メッセージを受信した場合は（ステップ１４２３のＹＥＳ）、ステップ１４２４へ進む。該当メッセージを受信していない場合は（ステップ１４２３のＮＯ）、図１４Ｂのステップ１４２７へ進む。
【０２２２】
ステップ１４２４では、データベースタスク１１１は、データベースタスク１１１の処理フェーズが「０」でないか否かを確認する。処理フェーズが「０」でない場合は（ステップ１４２４のＹＥＳ）、ステップ１４２５へ進む。処理フェーズが「０」である場合は（ステップ１４２４のＮＯ）、ステップ１４２６へ進む。  
ステップ１４２５では、データベースタスク１１１は、トランザクション処理のロールバック（Ｒｏｌｌｂａｃｋ）を行う。  
ステップ１４２６では、データベースタスク１１１は、トランザクション処理の中止完了を通知するメッセージを、データベースタスク制御部１０９に送信し、データベースタスク１１１の処理を終了する。
【０２２３】
図１４Ｂのステップ１４２７では、データベースタスク１１１は、データベースタスク制御部１０９からトランザクション処理の中断を要求するメッセージを受信したか否かを確認する。該当メッセージを受信した場合は（ステップ１４２７のＹＥＳ）、ステップ１４２８へ進む。該当メッセージを受信していない場合は（ステップ１４２７のＮＯ）、ステップ１４３６へ進む。
【０２２４】
ステップ１４２８では、データベースタスク１１１は、データベースタスク１１１の処理フェーズが「１Ａ」であるか否かを確認する。処理フェーズが「１Ａ」である場合は（ステップ１４２８のＹＥＳ）、ステップ１４２９へ進む。処理フェーズが「１Ａ」でない場合は（ステップ１４２８のＮＯ）、ステップ１４３０へ進む。  
ステップ１４２９では、データベースタスク１１１は、データベースタスク１１１の処理フェーズに「１ＡＳ」を設定し、ステップ１４３５へ進む。  
ステップ１４３０では、データベースタスク１１１は、データベースタスク１１１の処理フェーズが「１Ｂ」であるか否かを確認する。処理フェーズが「１Ｂ」である場合は（ステップ１４３０のＹＥＳ）、ステップ１４３１へ進む。処理フェーズが「１Ｂ」でない場合は（ステップ１４３０のＮＯ）、ステップ１４３２へ進む。  
ステップ１４３１では、データベースタスク１１１は、データベースタスク１１１の処理フェーズに「１ＢＳ」を設定し、ステップ１４３５へ進む。  
ステップ１４３２では、データベースタスク１１１は、データベースタスク１１１の処理フェーズが「２」であるか否かを確認する。処理フェーズが「２」である場合は（ステップ１４３２のＹＥＳ）、ステップ１４３３へ進む。処理フェーズが「２」でない場合は（ステップ１４３２のＮＯ）、ステップ１４３４へ進む。  
ステップ１４３３では、データベースタスク１１１は、データベースタスク１１１の処理フェーズに「２Ｓ」を設定し、ステップ１４３５へ進む。
【０２２５】
ステップ１４３４では、データベースタスク１１１は、データベースタスク１１１の処理フェーズに「０Ｓ」を設定する。  
ステップ１４３５では、データベースタスク１１１は、トランザクション処理の中断の完了を通知するメッセージを、データベースタスク制御部１０９に送信し、１４０１へ戻る。  
ステップ１４３６では、データベースタスク１１１は、データベースタスク制御部１０９からトランザクション処理の再会を要求するメッセージを受信したか否かを確認する。該当メッセージを受信した場合は（ステップ１４３６のＹＥＳ）、ステップ１４３７へ進む。該当メッセージを受信していない場合は（ステップ１４３６のＹＥＳ）、ステップ１４３９へ戻る。
【０２２６】
ステップ１４３７では、データベースタスク１１１は、データベースタスク１１１の処理フェーズが「１ＡＳ」であるか否かを確認する。処理フェーズが「１ＡＳ」である場合は（ステップ１４３７のＹＥＳ）、ステップ１４３８へ進む。処理フェーズが「１ＡＳ」でない場合は（ステップ１４３７のＮＯ）、ステップ１４３９へ進む。  
ステップ１４３８では、データベースタスク１１１は、データベースタスク１１１の処理フェーズに「１Ａ」を設定し、１４０１へ戻る。
【０２２７】
ステップ１４３９では、データベースタスク１１１は、データベースタスク１１１の処理フェーズが「１ＢＳ」であるか否かを確認する。処理フェーズが「１ＢＳ」である場合は（ステップ１４３９のＹＥＳ）、ステップ１４４０へ進む。処理フェーズが「１ＢＳ」でない場合は（ステップ１４３９のＮＯ）、ステップ１４４１へ進む。  
ステップ１４４０では、データベースタスク１１１は、データベースタスク１１１の処理フェーズに「１Ｂ」を設定し、ステップ１４０１へ戻る。
【０２２８】
ステップ１４４１では、データベースタスク１１１は、データベースタスク１１１の処理フェーズが「２Ｓ」であるか否かを確認する。処理フェーズが「２Ｓ」である場合は（ステップ１４４１のＹＥＳ）、ステップ１４４２へ進む。処理フェーズが「２Ｓ」でない場合は（ステップ１４４１のＮＯ）、ステップ１４４２へ進む。  
ステップ１４４２では、データベースタスク１１１は、データベースタスク１１１の処理フェーズに「２」を設定し、ステップ１４０１へ戻る。  
ステップ１４４３では、データベースタスク１１１は、データベースタスク１１１の処理フェーズに「０」を設定し、ステップ１４０１へ戻る。
【０２２９】
なお、データベースタスク１１１がトランザクション処理要求を受け付けるとは、アプリケーションプログラム２１１に対してトランザクション処理の実行を開始することが可能であることを通知するメッセージを送信し、アプリケーションプログラム２１１から要求されたトランザクション処理に含まれる問い合わせ処理を、処理の順番に従って受け取ることを表す。
【０２３０】
《共有ロック競合制御処理》
図１５は、図１２の共有ロック競合制御処理（ステップ１２０４の処理）の詳細を説明するフローチャートである。
【０２３１】
まずステップ１５００において、データベース資源競合制御部１０８は、データベース資源競合制御部１０８から、中止対象トランザクションリスト（ＬＣ）と、中断対象トランザクションリスト（ＬＳ）を受け取る。  
次のステップ１５０１では、データベース資源競合制御部１０８は、トランザクションプロファイル情報１１４のトランザクション識別子Ｔに対応する四つ組の共有ロックを取得するデータベースオブジェクトを記述するフィールド（１１０４）に記述された全てのデータベースオブジェクトを要素とする集合（ＫＳとする）を生成する。  
ステップ１５０２では、データベース資源競合制御部１０８は、集合ＫＳに含まれるデータベースオブジェクトの中から１つ選び（ＤＳとする）、そのデータベースオブジェクトを集合ＫＳから取り除く。
【０２３２】
ステップ１５０３では、データベース資源競合制御部１０８は、排他資源管理情報２２５を参照し、データベースオブジェクトＤＳに排他ロックを取得しているトランザクション処理を検出し、検出したトランザクション処理のうち、優先度の値が、優先度定義情報１０４に記述された優先度よりも小さい（優先度が低い）トランザクション処理が存在するか否かを確認する。該当するトランザクション処理が存在する場合は（ステップ１５０３のＹＥＳ）、ステップ１５０４へ進む。該当するトランザクション処理が存在しない場合は（ステップ１５０３のＮＯ）、ステップ１５０５へ進む。  
ステップ１５０４では、データベース資源競合制御部１０８は、データベースオブジェクトＤＳに排他ロックを取得しているトランザクション処理のうち、優先度定義情報１０４に記述された優先度よりも小さい（優先度が低い）トランザクション処理を全てＬＣに追加する。
【０２３３】
ステップ１５０５では、データベース資源競合制御部１０８は、集合ＫＳが空か否かを確認する。集合ＫＳが空の場合は（ステップ１５０５のＹＥＳ）、ステップ１５０６へ進む。集合ＫＳが空でない場合は（ステップ１５０５のＮＯ）、ステップ１５０２へ戻る。  
ステップ１５０６では、データベース資源競合制御部１０８は、中止対象トランザクションリスト（ＬＣ）と中断対象トランザクションリスト（ＬＳ）をデータベース資源競合制御部１０８に戻り値として返す。
【０２３４】
《排他ロック競合制御処理》
図１６は、図１２の排他ロック競合制御処理（ステップ１２０６の処理）の詳細を説明するフローチャートである。
【０２３５】
まずステップ１６００において、データベース資源競合制御部１０８は、データベース資源競合制御部１０８から、中止対象トランザクションリスト（ＬＣ）と、中断対象トランザクションリスト（ＬＳ）を受け取る。  
次にステップ１６０１では、データベース資源競合制御部１０８は、トランザクションプロファイル情報１１４のトランザクション識別子Ｔに対応する四つ組の排他ロックを取得するデータベースオブジェクトを記述するフィールド（１１０５）に記述された全てのデータベースオブジェクトを要素とする集合（ＫＸとする）を生成し、ステップ１２０７へ進む。  
ステップ１６０２では、データベース資源競合制御部１０８は、集合ＫＸに含まれるデータベースオブジェクトの中から１つ選び（ＤＸとする）、そのデータベースオブジェクトを集合ＫＸから取り除く。
【０２３６】
ステップ１６０３では、データベース資源競合制御部１０８は、排他資源管理情報２２５を参照し、データベースオブジェクトＤＸに共有ロックまたは排他ロックを取得しているトランザクション処理を検出し、検出したトランザクション処理のうち、優先度の値が、優先度定義情報１０４に記述された優先度よりも小さい（優先度が低い）トランザクション処理が存在するか否かを確認する。該当するトランザクション処理が存在する場合は（ステップ１６０３のＹＥＳ）、ステップ１６０４へ進む。該当するトランザクション処理が存在しない場合は（ステップ１６０３のＮＯ）、ステップ１６０５に進む。  
ステップ１６０４では、データベース資源競合制御部１０８は、データベースオブジェクトＤＸに共有ロックまたは排他ロックを取得しているトランザクション処理のうち、優先度定義情報１０４に記述された優先度よりも小さい（優先度が低い）トランザクション処理を全てＬＣに追加する。
【０２３７】
ステップ１６０５では、データベース資源競合制御部１０８は、集合ＫＸが空か否かを確認する。集合ＫＸが空の場合は（ステップ１６０５のＹＥＳ）、ステップ１６０６へ進む。集合ＫＸが空でない場合は（ステップ１６０５のＮＯ）、ステップ１６０２へ戻る。  
ステップ１６０６では、データベース資源競合制御部１０８は、中止対象トランザクションリスト（ＬＣ）と中断対象トランザクションリスト（ＬＳ）をデータベース資源競合制御部１０８に戻り値として返す。
【０２３８】
《データベースキャッシュメモリ競合制御処理》
図１７は、図１２のデータベースキャッシュメモリ競合制御処理（ステップ１２０７の処理）の詳細を説明するフローチャートである。
【０２３９】
まずステップ７００において、データベース資源競合制御部１０８は、データベース資源競合制御部１０８から、中止対象トランザクションリスト（ＬＣ）を受け取る。  
次のステップ１７０１では、データベース資源競合制御部１０８は、トランザクション状態管理情報２２４の実行中トランザクション管理リスト（１００１）と中断中トランザクション管理リスト（１００２）が保持する全てのトランザクション状態管理構造体に登録されているデータベースキャッシュメモリのサイズの合計値（ＭＡとする）を計算する。  
ステップ１７０２では、データベース資源競合制御部１０８は、中断対象トランザクションリストＬＣに含まれる全てのトランザクション処理に対応するトランザクション状態管理情報２２４のトランザクション状態管理構造体に登録されているデータベースキャッシュメモリのサイズの合計値（ＭＢとする）を計算する。
【０２４０】
ステップ１７０３では、データベース資源競合制御部１０８は、データベース管理システムプログラム２１２が使用可能なデータベースキャッシュメモリのサイズ（容量）をＣとし、Ｃから（ＭＡ−ＭＢ）の値を引いた値（Ｃ−（ＭＡ−ＭＢ））が、データベース資源取得予定情報１０５のデータベース資源の値（所要量）を記述するフィールド（７０２）に記述されたデータベースキャッシュメモリの値よりも小さいか否かを確認する。値が小さい場合は（ステップ１７０３のＹＥＳ）、ステップ１７０４へ進む。値が小さくない場合は（ステップ１７０３のＮＯ）、ステップ１７０６へ進む。
【０２４１】
ステップ１７０４では、データベース資源競合制御部１０８は、トランザクション状態管理情報２２４の実行中トランザクション管理リスト（１００１）と中断中トランザクション管理リスト（１００２）が保持するトランザクション状態管理構造体に登録されたトランザクション識別子に対応するトランザクション処理から、集合ＬＣに含まれるトランザクション処理を除いたもののうち、優先度の値（１０１２）が、優先度定義情報１０４に記述された優先度の値よりも小さいトランザクション状態管理構造体が存在するか否かを確認する。該当するトランザクション状態管理構造体が存在する場合は（ステップ１７０４のＹＥＳ）、ステップ１７０５へ進む。該当するトランザクション状態管理構造体が存在しない場合は（ステップ１７０４のＮＯ）、ステップ１７０７へ進む。
【０２４２】
ステップ１７０５では、データベース資源競合制御部１０８は、トランザクション状態管理情報２２４の実行中トランザクション管理リスト（１００１）と中断中トランザクション管理リスト（１００２）が保持するトランザクション状態管理構造体に登録されたトランザクション識別子に対応するトランザクション処理から、集合ＬＣに含まれるトランザクション処理を除いたもののうち、優先度の値（１０１２）が最も小さいトランザクション状態管理構造体に対応するトランザクション処理をＬＣに追加し、ステップ１７０２に戻る。
【０２４３】
ステップ１７０６では、データベース資源競合制御部１０８は、データベースキャッシュメモリの競合解決に失敗したことを示すフラグにＯＦＦを設定し、ステップ１７０８へ進む。  
ステップ１７０７では、データベース資源競合制御部１０８は、データベースキャッシュメモリの競合解決に失敗したことを示すフラグにＯＮを設定し、ステップ１７０８へ進む。  
ステップ１７０８では、データベース資源競合制御部１０８は、中止対象トランザクションリスト（ＬＣ）とデータベースキャッシュメモリの競合解決に失敗したことを示すフラグの値をデータベース資源競合制御部１０８に戻り値として返す。
【０２４４】
《Ｉ／Ｏデバイス競合制御処理》
図１８は、図１２のＩ／Ｏデバイス競合制御処理（１２０９の処理）の詳細を説明するフローチャートである。
【０２４５】
まずステップ１８００では、データベース資源競合制御部１０８は、データベース資源競合制御部１０８から、中止対象トランザクションリスト（ＬＣ）と、中断対象トランザクションリスト（ＬＳ）を受け取る。
【０２４６】
次のステップ１８０１では、データベース資源競合制御部１０８は、トランザクションプロファイル情報１１４のトランザクション識別子Ｔの四つ組のアクセスする対象のテーブルを記述するフィールド（１１０２）に記述されたテーブルの名称を全て取得し、データベース構成情報１１５を参照し、取得した各テーブルが生成されているデータベースの名称を全て取得し、さらに、取得したデータベースが生成されている全てのＩ／Ｏデバイスの名称を取得し、取得した全てのＩ／Ｏデバイスを要素とする集合（Ｄとする）を生成する。
【０２４７】
ステップ１８０２では、データベース資源競合制御部１０８は、トランザクション状態管理情報２２４の実行中トランザクション管理リスト（１００１）が保持するトランザクション状態管理構造体に登録されたトランザクション識別子に対応するトランザクション処理から、ＬＣに含まれるトランザクション処理を除いたもののうち、優先度の値（１０１２）が、優先度定義情報１０４に記述された優先度の値よりも小さいトランザクション状態管理構造体に登録されたトランザクション識別子に対応するトランザクション処理を、全てＬＳに追加する。
【０２４８】
ステップ１８０３では、データベース資源競合制御部１０８は、トランザクション処理を要素とする新たな集合ＴＬＳを生成し、ＬＳに含まれる全てのトランザクション処理をＴＬＳに追加する。  
ステップ１８０４では、データベース資源競合制御部１０８は、ＴＬＳに含まれるトランザクション処理のうち１つ（Ｔｉとする）を選び、ＴＬＳからＴｉを削除する。
【０２４９】
ステップ１８０５では、データベース資源競合制御部１０８は、トランザクションプロファイル情報１１４のトランザクション処理Ｔｉのトランザクション識別子の四つ組のアクセスする対象のテーブルを記述するフィールド（１１０２）に記述されたテーブルの名称を全て取得し、データベース構成情報１１５を参照し、取得した各テーブルが生成されているデータベースの名称を全て取得し、さらに、取得したデータベースが生成されている全てのＩ／Ｏデバイスの名称を取得し、取得した全てのＩ／Ｏデバイスを要素とする集合（Ｄｉとする）を生成する。
【０２５０】
ステップ１８０６では、データベース資源競合制御部１０８は、集合Ｄと集合Ｄｉの間に共通の要素（Ｉ／Ｏデバイス）が存在するか否かを確認する。共通の要素が存在する場合は（ステップ１８０６のＹＥＳ）、ステップ１８０８へ進む。共通の要素が存在しない場合は（ステップ１８０６のＮＯ）、ステップ１８０７へ進む。
【０２５１】
ステップ１８０７では、データベース資源競合制御部１０８は、集合ＬＳから、トランザクション処理Ｔｉを削除する。  
ステップ１８０８では、データベース資源競合制御部１０８は、集合ＴＬＳに要素が存在しないか（空か）否かを確認する。要素が存在しない（空の）場合は（ステップ１８０８のＹＥＳ）、ステップ１８０９へ進む。要素が存在する（空でない）場合は（ステップ１８０８のＮＯ）、ステップ１８０４へ戻る。  
ステップ１８０９では、データベース資源競合制御部１０８は、中止対象トランザクションリスト（ＬＣ）と中断対象トランザクションリスト（ＬＳ）をデータベース資源競合制御部１０８に戻り値として返す。
【０２５２】
以上に説明したように、本実施形態のトランザクション並行制御方法によれば、ＤＢＭＳ１００が他のトランザクション処理を実行中または中断中に当該実行中または中断中のトランザクション処理よりも高い優先度を有するトランザクション処理の指示を受けた場合、ＤＢＭＳ１００は実行中または中断中のトランザクション処理と要求されたトランザクション処理との間のデータベース資源の競合の状況を判定し、中止または中断するトランザクション処理を適切に決定する。このため、更新データの消失を最小限度に抑えることができる。
【０２５３】
また機器やアプリケーションの開発者が、並行制御されるトランザクション処理の組み合わせや順番を考慮することなく複数のトランザクション処理を並行に実行することができるため、機器やアプリケーション開発の煩雑さが軽減される。またこれにより機器やアプリケーションの開発に掛かる人件費などの費用を削減することができる。
【０２５４】
なお、以上の実施形態の説明は本発明の理解を容易にするためのものであり、本発明を限定するものではない。本発明はその趣旨を逸脱することなく、変更、改良され得ると共に本発明にはその等価物が含まれることは勿論である。
【図面の簡単な説明】
【０２５５】
【図１】トランザクション並行制御方法の概要を示す図である。
【図２】トランザクション並行制御が行われる情報処理装置２２６の一例を示す図である。
【図３】トランザクション並行制御処理を説明するフローチャートである。
【図４】データベース構成情報の一例を示す図である。
【図５】データベース構築処理を説明するフローチャートである。
【図６】トランザクション処理キューリストの一例を示す図である。
【図７】データベース資源取得予定情報の一例を示す図である。
【図８Ａ】利用可能メモリ情報の一例を示す図である。
【図８Ｂ】利用可能メモリ情報の別の例を示す図である。
【図９】トランザクション処理要求受付処理を説明するフローチャートである。
【図１０】トランザクション状態管理情報の一例を示す図である。
【図１１】トランザクションプロファイル情報の一例を示す図である。
【図１２】データベース資源競合制御処理を説明するフローチャートである。
【図１３Ａ】データベースタスク制御処理を説明するフローチャートである。
【図１３Ｂ】データベースタスク制御処理を説明するフローチャートである。
【図１３Ｃ】データベースタスク制御処理を説明するフローチャートである。
【図１３Ｄ】データベースタスク制御処理を説明するフローチャートである。
【図１４Ａ】データベースタスク処理を説明するフローチャートである。
【図１４Ｂ】データベースタスク処理を説明するフローチャートである。
【図１５】共有ロック競合制御処理を説明するフローチャートである。
【図１６】排他ロック競合制御処理を説明するフローチャートである。
【図１７】データベースキャッシュメモリ競合制御処理を説明するフローチャートである。
【図１８】Ｉ／Ｏデバイス競合制御処理を説明するフローチャートである。
【符号の説明】
【０２５６】
１００  ＤＢＭＳ
１０１  アプリケーション
１０２  アプリケーション
１０３  トランザクション識別子情報
１０４  優先度定義情報
１０５  データベース資源取得予定情報
１０６  利用可能メモリ領域情報
１０７  トランザクション処理要求受付部
１０８  データベース資源競合制御部
１０９  データベースタスク制御部
１１０  データベースタスク群
１１１  データベースタスク
１１２  共有ヒープメモリ
１１３  コンテキスト退避領域
１１４  トランザクションプロファイル情報
１１５  データベース構成情報
１１６  データベース
２００  ＣＰＵ
２０１  入力デバイス
２０２  ディスプレイデバイス
２０３  通信制御装置
２０４  ネットワーク
２０６  主記憶装置
２０７  ストレージデバイス
２１０  アプリケーションプログラム群
２１１  アプリケーションプログラム
２１７  トランザクション処理要求受付プログラム
２１８  データベース資源競合制御プログラム
２１９  データベースタスク制御プログラム
２２０  データベースタスクプログラム群
２２１  データベースタスクプログラム
２２２  データベース構成プログラム
２２６  情報処理装置
【図１】
0004612710.tif 000002
【図２】
0004612710.tif 000003
【図３】
0004612710.tif 000004
【図４】
0004612710.tif 000005
【図５】
0004612710.tif 000006
【図７】
0004612710.tif 000007
【図８Ａ】
0004612710.tif 000008
【図８Ｂ】
0004612710.tif 000009
【図９】
0004612710.tif 000010
【図１０】
0004612710.tif 000011
【図１１】
0004612710.tif 000012
【図１２】
0004612710.tif 000013
【図１３Ａ】
0004612710.tif 000014
【図１３Ｂ】
0004612710.tif 000015
【図１３Ｃ】
0004612710.tif 000016
【図１３Ｄ】
0004612710.tif 000017
【図１４Ａ】
0004612710.tif 000018
【図１４Ｂ】
0004612710.tif 000019
【図１５】
0004612710.tif 000020
【図１６】
0004612710.tif 000021
【図１７】
0004612710.tif 000022
【図１８】
0004612710.tif 000023
【図６】
0004612710.tif 000024