ITPub博客

首页 > 数据库 > Oracle > dba_segments表中的header_block与dba_extents表中的blockid问题

dba_segments表中的header_block与dba_extents表中的blockid问题

原创 Oracle 作者:tjsxxl 时间:2011-03-12 22:43:27 0 删除 编辑

dba_segments表中的header_block

SYS>select segment_name,header_file,header_block from dba_segments where segment_name='TEST' and owner='TIM';

SEGMENT_NAME HEADER_FILE HEADER_BLOCK
------------------------------ ---------------- -----------------
TEST 4 579

dba_extents表中的block_id

SYS>select segment_name,file_id,block_id from dba_extents where segment_name='TEST' and owner='TIM';

SEGMENT_NAME FILE_ID BLOCK_ID
------------------------------ ---------- ----------
TEST 4 577
TEST 4 585
TEST 4 593
TEST 4 601

从上面可以看出header_block并不是segment的第一个block

一个segment会有多个extent

一个segment在dba_segments中只有1条记录,只有一个header_block,这是存储segment header信息的那个block

一个segment在dba_extents中可能会有多条记录,每个block_id都是这个extent的起始block id。

一个ASSM的segment最初的那个extent中,block_id标示的block(也就是第一个extent的第一个block)是FIRST LEVEL BITMAP BLOCK,第二个block是SECOND LEVEL BITMAP BLOCK,这两个block用于管理free block,取代freelist的功能,而第三个block才是PAGETABLE SEGMENT HEADER(这才是header_block字段表示的block)。

那第一条记录是从那个块开始的呢?我们可以用下列命令来查看:

TIM>select dbms_rowid.ROWID_BLOCK_NUMBER(rowid) block_id,count(*) from test group by dbms_rowid.ROWID_BLOCK_NUMBER(rowid) order by dbms_rowid.ROWID_BLOCK_NUMBER
(rowid);

BLOCK_ID COUNT(*)
---------- ----------
580 4
581 322
582 323
583 322
584 322
585 322
586 322
587 322
588 322
589 322
590 322

可以看出第一条记录从580块开始。

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10685580/viewspace-1047165/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    20
  • 访问量
    40958