2012年9月11日火曜日

INITIAL_EXTENTと遅延セグメント作成な話4


前回でスッキリ!したのですが、まだちょっと気になるので、dumpを取得してみます。
やってみてがモットーのブログですしね。


では、やってきます。

SQL> create tablespace test_ext2 datafile 'C:\app\oracle\oradata\orcl\test_ext2_01.dbf' size 81K;

表領域が作成されました。

SQL> select TABLESPACE_NAME,BLOCK_ID,BYTES,BLOCKS from dba_free_space where tablespace_name= 'TEST_EXT2';

TABLESPACE_NAME       BLOCK_ID   BYTES     BLOCKS
--------------------- ---------- ---------- ----------
TEST_EXT2                             4      65536              8   -------(1)

SQL> alter user hoge quota unlimited on TEST_EXT2;

ユーザーが変更されました。

SQL> connect hoge/hoge
接続されました。


SQL> create table test_ext2(co1 number) tablespace TEST_EXT2;

表が作成されました。

SQL> connect /as sysdba
接続されました。


SQL> select owner,tablespace_name,table_name,segment_created from dba_tables where table_name= 'TEST_EXT2';

OWNER      TABLESPACE_NAME TABLE_NAME SEGMENT_CREATED
---------- ---------------     ----------    --------------------
HOGE          TEST_EXT2            TEST_EXT2        NO -------(2)

2話目で書きましたが、遅延セグメント作成な状態で、セグメントは作成されていません。



SQL> select tablespace_name,file_id from dba_data_files where tablespace_name='TEST_EXT2';
TABLESPACE_NAME    FILE_ID
--------------- ----------
TEST_EXT2                  14   -------(3)

(1)よりデータブロックの空きは4ブロック目(含む)から8ブロックなので、
11ブロック目が最期のブロックだと判断します。


ファイル番号14番のデータファイルの1ブロック目から11ブロックまでの
dumpを取得します。

SQL> alter system dump datafile 14 block min 1 block max 11;

システムが変更されました。


diag\<DB_NAME>\<INSTANCE_NAME>\trace配下に出力された
dumpファイルを確認します。


先頭辺り
--------

*** 2012-09-11 11:02:09.047
*** SESSION ID:(9.37) 2012-09-11 11:02:09.047
*** CLIENT ID:() 2012-09-11 11:02:09.047
*** SERVICE NAME:(SYS$USERS) 2012-09-11 11:02:09.047
*** MODULE NAME:(sqlplus.exe) 2012-09-11 11:02:09.047
*** ACTION NAME:() 2012-09-11 11:02:09.047

Start dump data blocks tsn: 12 file#:14 minblk 1 maxblk 11
Block 1 (file header) not dumped:use dump file header command   -------(4)

早々に注意されています。1ブロック目はファイルヘッダーブロックだから、
ファイルヘッダーをダンプするコマンド使いなさいと。

まあ、1ブロック目がファイルヘッダーブロックってことは分かりました。


2ブロック目を確認
rdba(相対データ・ブロック・アドレス)という文字列を検索して2ブロック目を探します。
----------------------------
Block dump from disk:
buffer tsn: 12 rdba: 0x03800002 (14/2)    -------(5)
scn: 0x0000.00398ff6 seq: 0x03 flg: 0x04 tail: 0x8ff61d03
frmt: 0x02 chkval: 0x75b5 type: 0x1d=KTFB Bitmapped File Space Header   -------(6)


(5)がrdbaですね、(file_id/ブロック番号)なので、
14番のデータファイルの2ブロック目ということがわかります。

(6)を見てみると、「Bitmapped File Space Header」とあります。
このブロックが、 ビットマップ・ヘッダ・ブロックと考えてよさそうです。


3ブロック目を確認
----------------------------
Block dump from disk:
buffer tsn: 12 rdba: 0x03800003 (14/3)   -------(7)
scn: 0x0000.0039ecd1 seq: 0x01 flg: 0x04 tail: 0xecd11e01
frmt: 0x02 chkval: 0x43ae type: 0x1e=KTFB Bitmapped File Space Bitmap   -------(8)


(7)より14番のデータファイルの3ブロック目ということがわかります。

(8)を見てみると、「Bitmapped File Space Bitmap」とあります。
このブロックが、 ビットマップ・ブロックと考えてよさそうです。


4ブロック目を確認
----------------------------
Block dump from disk:
buffer tsn: 12 rdba: 0x00000004 (0/4)   -------(9)
scn: 0x0000.00000000 seq: 0x01 flg: 0x05 tail: 0x00000001
frmt: 0x02 chkval: 0xa704 type: 0x00=unknown   -------(10)

14/4が見つかりません。ファイルの終わりまで見ると(9)の部分が、(0/11)まであります。
8ブロック。。(10)はunknownになっています。

遅延セグメント作成でセグメントが作成されていないので、
空き領域になっているんですかね。



一先ず、1~3ブロック目までは、技術文書通りだということが分かって、スッキリ!!


次回は、遅延セグメント作成のセグメントに行を追加して、どうなるかを見てみます。


0 件のコメント:

コメントを投稿