Oracleデータベースのカーネル管理-データブロックの読み取りと書き込み

Oracleは、データブロックプロセスを読み取りまたは変更します。

1.(読み取り操作)非一意インデックスモード、非インデックスルートブロックおよびブランチブロック

  1. アクセスするブロックのアドレスをハッシュします

HASH(FILE#、BLOCK#)= hash_value(HV)

  1. HVに従って対応するHASHバケットを見つけます

  2. このバケットを管理するCBCラッチに排他的に適用します

  3. バケット内のHASHチェーンリストを検索し、チェーン上のbuffer_header(BH)を比較して、ターゲットBHを見つけます

  4. BHのバッファピンロックをS(共有)モードに変更します(以前は0、ロックなし)

  5. CBCラッチを解放します。

  6. BHのBAポインタに従ってバッファを見つけます

  7. バッファ内のデータをPGAに読み取ります。

  8. このバケットを管理するCBCラッチに排他的に適用します

10. BHのバッファピンロックを0(ロックなし)モードに変更します
。11。CBCラッチを解放します

2.(読み取り操作)一意のインデックスモードのすべてのブロック、一意でないインデックスルートブロックおよびブランチブロック

  1. アクセスするブロックのアドレスをハッシュします

HASH(FILE#、BLOCK#)= hash_value(HV)

  1. HVに従って対応するHASHバケットを見つけます

  2. このバケットを共有する方法で管理するCBCラッチを申請します

  3. バケット内のHASHチェーンリストを検索し、チェーン上のbuffer_header(BH)を比較して、ターゲットBHを見つけます

  4. BHのBAポインタに従ってバッファを見つけます

  5. バッファ内のデータをPGAに読み取ります

  6. CBCラッチを解放します

3.(書き込み操作)

  1. アクセスするブロックのアドレスをハッシュします

HASH(FILE#、BLOCK#)= hash_value(HV)

  1. HVに従って対応するHASHバケットを見つけます

  2. このバケットを管理するCBCラッチに排他的に適用します

  3. バケット内のHASHチェーンリストを検索し、チェーン上のbuffer_header(BH)を比較して、ターゲットBHを見つけます

。5。BHのバッファピンロックをX(排他的)モード(以前は0、ロックなし)に変更します。

  1. CBCラッチを解放します

  2. BHのBAポインタに従ってバッファを見つけます

  3. REDOデータを生成する

  4. バッファ内のデータを変更します。

  5. このバケットを管理するCBCラッチに排他的に適用します。

10.BHのバッファピンロックを0モードに変更します

11.CBCラッチを解放します。

おすすめ

転載: blog.csdn.net/oradbm/article/details/109614606