Hitachi

ノンストップデータベース HiRDB Version 10 構造型データベース機能


2.9.5 排他自動解除機能を使用したレコードの検索例

排他自動解除機能を使用したレコードの検索例を次に示します。

4V AFMのSDBデータベースでも仮想ルートレコードのレコード実現値を操作して検索するため,基本的には4V FMBのSDBデータベースの例と同様の動作となります。

なお,上記の例の中で使用している記号の凡例については,「2.9.5(1)例1 排他自動解除機能を使用する場合のSDBデータベースの階層順検索【4V FMB,SD FMB】」の1.にある図の凡例を参照してください。

〈この項の構成〉

(1) 例1 排他自動解除機能を使用する場合のSDBデータベースの階層順検索【4V FMB,SD FMB】

  1. ルートレコードのレコード実現値A,2階層目のレコード実現値A1,および3階層目のレコード実現値A1-1の順にレコードを検索(FETCH)します。

    これによって,検索したレコード実現値が格納されているデータページP1,P2,およびP3に排他(SRモード)が掛かります。

    [図データ]

  2. 3階層目のレコード実現値A1-2を検索(FETCH)します。

    この場合,レコード位置指示子R3が指すレコード実現値は,A1-1からA1-2となりますが,これらのレコード実現値は同一データページに格納されているため,データページP3は排他(SRモード)が掛かった状態のままです。

    [図データ]

  3. 3階層目のレコード実現値A1-3を検索(FETCH)します。

    この場合,レコード位置指示子R3が指すレコード実現値は,A1-2からA1-3となります。これらのレコード実現値は異なるデータページに格納されているため,データページP6に排他(SRモード)が掛かり,データページP3の排他(SRモード)は解除されます。

    [図データ]

  4. 2階層目のレコードA2を検索(FETCH)します。

    この場合,レコード位置指示子R2が指すレコード実現値はA1からA2となります。これらのレコード実現値は異なるデータページに格納されているため,データページP8に排他(SRモード)が掛かり,データページP2の排他(SRモード)は解除されます。同時に,レコード位置指示子R3が空値となるため,3階層目のレコード実現値A1-3が格納されているデータページP6の排他(SRモード)も解除されます。

    [図データ]

  5. 3階層目のレコード実現値A2-1を検索(FETCH)します。

    この場合,レコード位置指示子R3がレコード実現値A2-1を指すので,レコード実現値A2-1が格納されているデータページP9に排他(SRモード)が掛かります。

    [図データ]

  6. ルートレコードのレコード実現値Bを検索(FETCH)します。

    この場合,レコード位置指示子R1が指すレコード実現値はAからBとなるので,データページP10に排他(SRモード)が掛かり,データページP1の排他(SRモード)は解除されます。同時に,レコード位置指示子R2およびR3が空値となるので,それまでレコード位置指示子が指していたレコード実現値を格納しているデータページP8およびP9の排他(SRモード)も解除されます。

    [図データ]

(2) 例2 排他自動解除機能を使用しない場合のSDBデータベースの階層順検索【4V FMB,SD FMB】

排他自動解除機能を使用しないで「2.9.5(1)例1 排他自動解除機能を使用する場合のSDBデータベースの階層順検索【4V FMB,SD FMB】」の1.〜6.で示した検索(FETCH)を実行すると,一度検索したレコード実現値を格納しているデータページP1,P2,P3,P6,P8,およびP9の排他(SRモード)は解除されないで,トランザクションが終了するまで保持されます。

[図データ]

(3) 例3 排他自動解除機能を使用してレコードの格納(STORE)を実行する場合の動作【4V FMB,SD FMB】

  1. 次の順序でSDBデータベースを操作するAPIまたはDMLを実行します。

    a. ルートレコードのレコード実現値Aを検索(FETCH)します。

    b. 2階層目のレコード実現値A1を検索(FETCH)します。

    c. 3階層目のレコード実現値A1-1を検索(FETCH)します。

    d. 4階層目のレコード実現値A1-1-3を格納(STORE)します。

    APIまたはDMLを実行すると,次の図のように排他が掛かります。

    [図データ]

  2. ルートレコードのレコード実現値Bを検索(FETCH)します。

    この場合,ルートレコードのレコード実現値Bが格納されているデータページP5に排他(PUモード)が掛かり,ルートレコードのレコード実現値Aが格納されているデータページP1を除き,更新されていないデータページP2の排他(PUモード)だけが解除されます。なお,データページP3,P4,P12については,レコード間ポインタなどの制御情報が更新されるため,排他が掛かった状態のままとなります。

    [図データ]

(4) 例4 排他自動解除機能を使用してレコードの更新(MODIFY)を実行する場合の動作【4V FMB,SD FMB】

  1. 次の順序でSDBデータベースを操作するAPIまたはDMLを実行します。

    a. ルートレコードのレコード実現値Aを検索(FETCH)します。

    b. 2階層目のレコード実現値A1を検索(FETCH)します。

    c. 3階層目のレコード実現値A1-1を検索(FETCH)します。

    d. 3階層目のレコード実現値A1-1を更新(MODIFY)します。

    APIまたはDMLを実行すると,次の図のように排他が掛かります。

    [図データ]

  2. ルートレコードのレコード実現値Bを検索(FETCH)します。

    この場合,ルートレコードのレコード実現値Bが格納されているデータページP4に排他(PUモード)が掛かり,ルートレコードのレコード実現値Aが格納されているデータページP1を除き,更新されていないデータページP2の排他(PUモード)だけが解除されます。

    [図データ]

(5) 例5 排他自動解除機能を使用してレコードの削除(ERASE)を実行する場合の動作【4V FMB,SD FMB】

  1. 次の順序でSDBデータベースを操作するAPIまたはDMLを実行します。

    a. ルートレコードのレコード実現値Aを検索(FETCH)します。

    b. 2階層目のレコード実現値A1を検索(FETCH)します。

    c. 3階層目のレコード実現値A1-1を検索(FETCH)します。

    d. 4階層目のレコード実現値A1-1-2を検索(FETCH)します。

    e. 4階層目のレコード実現値A1-1-2を削除(ERASE)します(位置づけしたレコード実現値(その配下の子レコード実現値も含む)を削除します)。

    APIまたはDMLを実行すると,次の図のように排他が掛かります。

    [図データ]

  2. ルートレコードのレコード実現値Bを検索(FETCH)します。

    この場合,ルートレコードのレコード実現値Bが格納されているデータページP6に排他(PU)が掛かり,ルートレコードのレコード実現値Aが格納されているデータページP1と削除対象のレコード実現値A1-1-2の親レコード実現値A1-1が格納されているデータページP3を除いて,更新されていないデータページP2の排他(PUモード)だけが解除されます。なお,データページP4,P14については,レコード間ポインタの制御情報が変更されるため,排他が掛かった状態のままとなります。

    [図データ]

(6) 例6 排他自動解除機能を使用して一括削除を実行する場合の動作【4V DAM,4V SAM】

  1. 仮想ルートレコードのレコード実現値A下のすべてのレコード実現値に対して一括削除を実行します。

    一括削除の結果,仮想ルートレコードのレコード実現値Aが格納されているデータページP1に排他(EXモード)が掛かります。

    [図データ]

  2. 2階層目のレコード実現値B1-1を検索(FETCH)します。

    この場合,仮想ルートレコードのレコード実現値Bが格納されているデータページP5,2階層目のレコード実現値B1-1が格納されているデータページP6にそれぞれ排他(SRモード,PUモード)が掛かりますが,排他確保済みページの中で更新されていないページは存在しないため,排他は解除されません。

    [図データ]

(7) 例7 構成情報取得を実行する場合の動作【4V AFM】

構成情報取得については,排他自動解除機能を適用しない場合の動作がこれまでのAPIと異なります。

  1. 仮想ルートレコードのレコード実現値AおよびB下のレコード実現値の構成情報取得を実行します。

    この場合,仮想ルートレコードのレコード実現値AからBの順に操作しますが,排他自動解除機能の適用有無に関係なく,排他自動解除機能が適用された場合の動作となります。

    [図データ]

  2. APIが終了したときには,最後に操作した仮想ルートレコードのレコード実現値Bが格納されているデータページP3の排他(SRモード)も解除されます。

    [図データ]

(8) 例8 排他自動解除機能を使用して複数レコードの検索(FETCHDB ALL)を実行する場合の動作【4V FMB】

  1. 指示コードに'F'を指定して,複数レコードの検索(FETCHDB ALL)を実行することで,ルートレコードのレコード実現値A,2階層目のレコード実現値A1,および3階層目のレコード実現値A1-1を検索します。

    複数レコードの検索では,ルートレコード実現値が格納されているデータページ以外のページに排他を掛けないため,データページP1にだけ排他(SRモード)が掛かります。

    [図データ]

  2. 指示コードに'N'を指定して,複数レコードの検索(FETCHDB ALL)を実行することで,4階層目のレコード実現値A1-1-1,A1-1-2,A1-1-3を検索します。

    この場合,ファミリの移動はないため,データページP1にだけ排他(SRモード)が掛かった状態のままとなります。

    [図データ]

  3. 指示コードに'N'を指定して,複数レコードの検索(FETCHDB ALL)でルートレコードのレコード実現値B,2階層目のレコード実現値B1,および3階層目のレコード実現値B1-1を検索します。

    この場合,ファミリが移動したため,ルートレコード実現値Bが格納されているデータページP5にだけ排他(SRモード)が掛かり,データページP1の排他は解除されます。

    [図データ]

  4. 指示コードに'N'を指定して,複数レコードの検索(FETCHDB ALL)でルートレコードのレコード実現値C,2階層目のレコード実現値C1,および3階層目のレコード実現値C1-1を検索します。

    ファミリが移動したため,ルートレコード実現値Cが格納されているデータページP9にだけ排他(SRモード)が掛かり,データページP5の排他は解除されます。

    [図データ]

なお,排他自動解除機能を使用しないで1.から4.に示した検索を実行すると,一度検索したルートレコード実現値を格納しているデータページP1,P5およびP9の排他(SRモード)は解除されないで,トランザクション終了まで保持されます。

(9) 排他自動解除機能の使用時に排他が解除されないケース

■4V FMBまたは4V AFMのSDBデータベースの場合

次に示す場合は,排他自動解除機能を使用したときでも,データの完全性を保証するために排他解除の対象外となります。

  • 更新したレコード実現値が格納されている場合(SDBデータベースを操作するAPIの排他モード1に'E'(排他モード)または'O'(占有モード)を指定して,検索しただけのレコード実現値が格納されているページは排他解除の対象となります)

  • レコード実現値が1つでも更新されているファミリのルートレコードのレコード実現値が格納されている場合

なお,4V FMBのSDBデータベースで,USERポインタが設定されていない中間レコード(FIRSTポインタ,LASTポインタのどちらからも指されていないレコード実現値)を削除する場合,削除対象となるレコード実現値の親レコード実現値は更新されませんが,例外的に排他は解除されません。

■SD FMBのSDBデータベースの場合

次に示す場合は,排他自動解除機能を使用したときでも,データの完全性を保証するために排他解除の対象外となります。

  • 更新したレコード実現値が格納されている場合(FOR UPDATEオペランドを指定して,検索しただけのレコード実現値が格納されているページは排他解除の対象となります)

  • レコード実現値が1つでも更新されているファミリのルートレコードのレコード実現値が格納されている場合

なお,中間レコード(FIRSTポインタ,LASTポインタのどちらからも指されていないレコード実現値)を削除する場合,削除対象となるレコード実現値の親レコード実現値は更新されませんが,例外的に排他は解除されません。