ロックに関する検証 その7

投稿日: 2001年6月13日

~ロックに関する検証 その7~
ペンネーム ちゃむ

前回は、ビットマップ・インデックスの構造の詳細に迫ってみた。
今回は、BLOCK DUMPによりビットマップ・インデックスの構造をさらに詳細に
見ていこう。この構造が分からないと、ビットマップ・インデックスのロック
の問題を理解することはできない。

では、BLOCK DUMPを見てみよう。

BITMAP_4のBLOCK DUMPをすべて取得するためには、以下のSQLでBLOCK_ID等を取
得(結果をファイルに出力)した後、そのスクリプト(ファイル)を実行するこ
とにする。

SQL> SET FEEDBACK OFF
SQL> SET PAGES 0
SQL> SET HEAD OFF
SQL> SET TERMOUT OFF

SQL> SPOOL C:B_DUMP.SQL
SQL> SELECT 'ALTER SYSTEM DUMP DATAFILE ' || FILE_ID ||  ' BLOCK '  || BLOCK_ID || ';'
     FROM DBA_EXTENTS WHERE SEGMENT_NAME = 'BITMAP_4'
     ORDER BY BLOCK_ID;

上記のSQLによって出力されたファイルを実行する。

SQL> @C:B_DUMP.SQL

以下 C:B_DUMP.SQLの中身を抜粋

ALTER SYSTEM DUMP DATAFILE 4 BLOCK 18333;
ALTER SYSTEM DUMP DATAFILE 4 BLOCK 22960;
ALTER SYSTEM DUMP DATAFILE 4 BLOCK 23025;
ALTER SYSTEM DUMP DATAFILE 4 BLOCK 23043;
          :         :          :
          :         :          :
ALTER SYSTEM DUMP DATAFILE 4 BLOCK 83055;
ALTER SYSTEM DUMP DATAFILE 4 BLOCK 83070;
ALTER SYSTEM DUMP DATAFILE 4 BLOCK 83132;
ALTER SYSTEM DUMP DATAFILE 4 BLOCK 83164;

それでは、ビットマップ・インデックスのBLOCK DUMPの中身を覗いてみよう。
まず始めに、ブランチ・ブロックから見ていくことにしよう。
セグメント・ヘッダーとBranchブロックが同じエクステントに1ブロックずつ格
納されたという話をしたが(前回)、その都合上、上記のスクリプトには、branch
ブロックのBLOCK DUMPを取得するためのスクリプトは含まれていない。前回の
TREE DUMPから、BLOCK DUMPの取得に必要なブランチ・ブロックのBLOCK_ID、
FILE_IDを知ることができる。

******************* 前回のTREE DUMPのブランチ部分 ********************
branch: 0x1005e02 16801282 (0: nrow: 88, level: 1)  ← branch block
**********************************************************************
SQL> SELECT DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE(16801282) FILE_ID,
            DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(16801282) BLOCK_ID
     from dual;

  FILE_ID  BLOCK_ID
--------- ---------
        4     24066

SQL> ALTER SYSTEM DUMP DATAFILE 4 BLOCK 24066 ;

上記の結果(ダンプ)は、以下のURLに示す。nrow: 88の個数の部分も確認して
頂きたい。

このインデックスは、以下のようにカーディナリティが 4 のカラムに対して作
成したビットマップ・インデックスである。

SQL> select distinct mgr from t10man_copy_4 ;
MGR