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