ローカルエクステントマネージメントに関する検証 その5
~ローカルエクステントマネージメントに関する検証 その5~
ペンネーム ちゃむ
————————————————————————–
8iからの新機能ローカルエクステントマネージメントを以下「LOCAL」と呼ぶ。
従来のデータディクショナリーでエクステントを管理する方法を以下「DICTIONARY」
と呼ぶ。
————————————————————————–
前回は、「LOCAL」で管理されている領域に対して、db_block_sizeを変えたときの
動きに関して説明した。
今回は、前回の未検証分「FFFFFFFFFFFFFF0F」の気になる0の位置に関して検証する。
検証手順(以下のすべての検証結果は、DB_BLOCK_SIZE = 2Kで行ったものである)
1.「LOCAL」を作成する
2. その「LOCAL」に 1 UNIFORM SIZE分のテーブルを60個作成する
「2」においては、検証スクリプトとして、自社開発言語「SQeeL(スキール)」を用いております。
*詳細をご希望の方は、弊社までお問い合わせください。
mailto:insight-mktg@insight-tec.co.jp
1.「LOCAL」を作成する
CREATE TABLESPACE tbs_u_1 DATAFILE 'c:tbs_u_1.ora' SIZE 1024K EXTENT MANAGEMENT LOCAL UNIFORM SIZE 8K;
作成直後のDBA_FREE_SPACEの様子
TABLESPACE_NAME FILE_ID BLOCK_ID BYTES BLOCKS -------------------------------------------------- TBS_U_1 25 33 983040 480
2.自社開発言語SQeeLによる「LOCAL」に 1 UNIFORM SIZE分のテーブル
を60個作成する
———————–SQeeLスクリプト始め————————–
global n , i connect scott/tiger /* 簡単なエラーメッセージ及び正常処理メッセージ dberrは上記connect文によって返される戻り値 正常時 0 エラー時 パスワードが間違っているときなどのORA-01017 エラーの数字部分「1017」などが入る */ if dberr==0 print('ok ok okよ') else print('${dberr}だめだめだめよ') endif n=60 /*ループ60回*/ loop i=0; i<n; i++ /* tbs_u_tbl_0, tbs_u_tbl_1,tbs_u_tbl_2のように ループするごとに順番に1 UNIFORM SIZE分のテーブルを作成していく ${変数}は中の変数を値に展開するものである。 また、initial 2kとしておけば、UNIFORM SIZE=8K丸められる。 */ sql CREATE TABLE tbs_u_tbl_${i} (col number) storage (initial 2k next 2k minextents 1 pctincrease 0) tablespace tbs_u_1; /*簡単なエラーメッセージ及び正常処理メッセージ*/ if dberr==0 print('ok ok okよ') else print('${dberr}だめだめだめよ') endif /*ビットマップ情報が格納されるブロックダンプ出力*/ sql alter system dump datafile 25 block 3; /*簡単なエラーメッセージ及び正常処理メッセージ*/ if dberr==0 print('ok ok okよ') else print('${dberr}だめだめだめよ') endif endloop logout
———————–SQeeLスクリプト終わり————————
重要なところのみコメントを付加したので読んでみてほしい。
では、このときのビットマップ情報の変化を見ていこう。
「0100000000000000」→「0300000000000000」→「0700000000000000」→ 「0F00000000000000」→「1F00000000000000」→「3F00000000000000」→ 「7F00000000000000」→「FF00000000000000」→「FF01000000000000」→ 「FF03000000000000」→「FF07000000000000」→「FF0F000000000000」→ 「FF1F000000000000」→「FF3F000000000000」→「FF7F000000000000」→ 「FFFF000000000000」→「FFFF010000000000」→「FFFF030000000000」→ 「FFFF070000000000」→「FFFF0F0000000000」→「FFFF1F0000000000」→ 「FFFF3F0000000000」→「FFFF7F0000000000」→「FFFFFF0000000000」→ 「FFFFFF0100000000」→「FFFFFF0300000000」→「FFFFFF0700000000」→ 「FFFFFF0F00000000」→「FFFFFF1F00000000」→「FFFFFF3F00000000」→ 「FFFFFF7F00000000」→「FFFFFFFF00000000」→「FFFFFFFF01000000」→ 「FFFFFFFF03000000」→「FFFFFFFF07000000」→「FFFFFFFF0F000000」→ 「FFFFFFFF1F000000」→「FFFFFFFF3F000000」→「FFFFFFFF7F000000」→ 「FFFFFFFFFF000000」→「FFFFFFFFFF010000」→「FFFFFFFFFF030000」→ 「FFFFFFFFFF070000」→「FFFFFFFFFF0F0000」→「FFFFFFFFFF1F0000」→ 「FFFFFFFFFF3F0000」→「FFFFFFFFFF7F0000」→「FFFFFFFFFFFF0000」→ 「FFFFFFFFFFFF0100」→「FFFFFFFFFFFF0300」→「FFFFFFFFFFFF0700」→ 「FFFFFFFFFFFF0F00」→「FFFFFFFFFFFF1F00」→「FFFFFFFFFFFF3F00」→ 「FFFFFFFFFFFF7F00」→「FFFFFFFFFFFFFF00」→「FFFFFFFFFFFFFF01」→ 「FFFFFFFFFFFFFF03」→「FFFFFFFFFFFFFF07」→「FFFFFFFFFFFFFF0F」
始めの8つのビットの変化の動きを細かく見ていこう。
始めの16進数の2桁を組にして2進数に直すと次のようになる。
tbs_u_tbl_0 テーブル作成後 「01」→「00000001」 tbs_u_tbl_1 テーブル作成後 「03」→「00000011」 tbs_u_tbl_2 テーブル作成後 「07」→「00000111」 tbs_u_tbl_3 テーブル作成後 「0F」→「00001111」 tbs_u_tbl_4 テーブル作成後 「1F」→「00011111」 tbs_u_tbl_5 テーブル作成後 「3F」→「00111111」 tbs_u_tbl_6 テーブル作成後 「7F」→「01111111」 tbs_u_tbl_7 テーブル作成後 「FF」→「11111111」
これで「FFFFFFFFFFFFFF0F」の途中で0が現れる意味も理解できるだろう。
と、ここまで書いてみて、こんなこと知っていてなんのためになるんだと
お思いの方もいると思うが、「平にご容赦ください。」
でも、謎は解かなきゃ!!!
ORACLE OPEN WORLD出展が決まりました。
メルマガ購読者にはもれなく….
こうご期待!!
以上 ジャスコができた 茅ヶ崎にて