ロックに関する検証 その7
~ロックに関する検証 その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
