ITPub博客

首页 > Linux操作系统 > Linux操作系统 > extent bitmap(1)

extent bitmap(1)

原创 Linux操作系统 作者:ylw66 时间:2009-09-11 15:35:45 0 删除 编辑

我们在一个新的表空间上建表,发现数据都是从第9block开始的,我想看看前8block中有些什么

 

SQL> create tablespace yang2

  2  logging

  3  datafile 'd:\oracle\oradata\game\yang2.ora' size 5M

  4  extent management local uniform. size 40k

  5  segment space management manual;

表空间已创建。

 

SQL>  create table test2(x int,y varchar2(1200),z varchar2(1200)) tablespace yang

 pctfree 70 pctused 20;

表已创建。

 

SQL> alter system dump datafile 16 block 1;

系统已更改。

 

dump文件显示如下:

Start dump data blocks tsn: 19 file#: 16 minblk 1 maxblk 1

Block 1 (file header) not dumped: use dump file header command  ---需要使用dump file header的命令

End dump data blocks tsn: 19 file#: 16 minblk 2 maxblk 1

 

 

SQL> alter session set events 'immediate trace name file_hdrs level 2';

会话已更改。

alter session set events ‘immediate trace name file_hdrs level 1′; –表示dump所有数据文件头部的控制文件项。

alter session set events ‘immediate trace name file_hdrs level 2′; –表示dump所有数据文件的通用文件头。

alter session set events ‘immediate trace name file_hdrs level 10′; –表示dump所有数据文件的完整文件头。

dump文件中找到DATA FILE #16,显示的是文件头的信息

(name #22) D:\ORACLE\ORADATA\GAME\YANG2.ORA

creation size=640 block size=8192 status=0xe head=22 tail=22 dup=1

 tablespace 19, index=17 krfil=16 prev_file=0

 unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00

 Checkpoint cnt:2 scn: 0x0000.0143c8a5 09/11/2009 09:28:55

 Stop scn: 0xffff.ffffffff 09/11/2009 09:28:54

 Creation Checkpointed at scn:  0x0000.0143c8a4 09/11/2009 09:28:54

 thread:1 rba:(0x127.db2.10)

 enabled  threads:  01000000 00000000 00000000 00000000 00000000 00000000

  00000000 00000000

 Offline scn: 0x0000.00000000 prev_range: 0

 Online Checkpointed at scn:  0x0000.00000000

 thread:0 rba:(0x0.0.0)

 enabled  threads:  00000000 00000000 00000000 00000000 00000000 00000000

  00000000 00000000

 Hot Backup end marker scn: 0x0000.00000000

 aux_file is NOT DEFINED

 FILE HEADER:

         Software vsn=153092096=0x9200000, Compatibility Vsn=134217728=0x8000000

         Db ID=4293092374=0xffe36416, Db Name='GAME'

         Activation ID=0=0x0

         Control Seq=3021=0xbcd, File size=640=0x280

         File Number=16, Blksiz=8192, File Type=3 DATA

 

继续

SQL> alter system dump datafile 16 block 2;

系统已更改。

 

buffer tsn: 19 rdba: 0x04000002 (16/2)

scn: 0x0000.0143c919 seq: 0x02 flg: 0x00 tail: 0xc9191d02

frmt: 0x02 chkval: 0x0000 type: 0x1d=KTFB Bitmapped File Space Header

File Space Header Block:

Header Control:

RelFno: 16, Unit: 16, Size: 640, Flag: 1

AutoExtend: NO, Increment: 0, MaxSize: 0

Initial Area: 7, Tail: 632, First: 1, Free: 38

Header Opcode:

Save: No Pending Op

 

SQL> alter system dump datafile 16 block min 3 block max 8;

系统已更改。

buffer tsn: 19 rdba: 0x04000003 (16/3)

scn: 0x0000.0143c919 seq: 0x01 flg: 0x00 tail: 0xc9191e01

frmt: 0x02 chkval: 0x0000 type: 0x1e=KTFB Bitmapped File Space Bitmap

File Space Bitmap Block:

BitMap Control:

0100000000000000 0000000000000000 0000000000000000 0000000000000000

bitmap节选了第一行

 

Concept中的一段

locally managed tablespaces, which use bitmaps (instead of data dictionary tables) to track used and free space

本地管理表空间,使用位图来跟踪使用和空闲的空间

0100000000000000就是存放在内存中extent的位图,是16进制表示,转化为2进制

0000 0001 ,考虑到先写字节的低位再写字节的高位,交换一下显示的比较直观

1000 0000 1extent使用了

 

之前创建的uniform. size40k5block,现在来占满5

SQL> insert into test2 select rownum,lpad('a',1200),lpad('a',1200)

  2  from dba_objects

  3  where rownum<7;

已创建6行。

SQL> commit;

提交完成。

SQL> alter system dump datafile 16 block 3;

系统已更改。

 

BitMap Control:

0300000000000000 0000000000000000 0000000000000000 0000000000000000

0000 0011 ---> 1100 0000  说明分配了第2extent

SQL> select t.blocks,t.extent_id from dba_extents t where t.segment_name='TEST2'

 and t.owner='SCOTT';

    BLOCKS  EXTENT_ID

---------- ----------

         5          0

         5          1

和数据字典是一致的

 

通过insert占用500的块

SQL> insert into test2

  2  select rownum,lpad('a',1200),lpad('b',1200)

  3  from dba_objects

  4  where rownum<501;

已创建500行。

SQL> commit;

提交完成。

SQL> alter system dump datafile 16 block 3;

系统已更改。

BitMap Control:

FFFFFFFFFFFFFFFF FFFFFFFF1F000000 0000000000000000 0000000000000000

1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111

1111 1111 1111 1111 1111 1111 1111 1111 0001 1111

说明已经分配了101extent

SQL> select count(*) from dba_extents t where t.segment_name='TEST2' and t.owner

='SCOTT';

  COUNT(*)

----------

       101

和数据字典查询的结果一致

 

truncate table看看BitMap的变化

SQL> truncate table test2;

表已截掉。

SQL> alter system dump datafile 16 block 3;

系统已更改。

BitMap Control:

0100000000000000 0000000000000000 0000000000000000 0000000000000000

位图的改变很明显

 

SQL> drop table test2;

表已丢弃。

SQL> alter system dump datafile 16 block 3;

系统已更改。

BitMap Control:

000000000000000 0000000000000000 0000000000000000 0000000000000000

 

如果你dump block min 3 max 8你就会发现有很多的bitmap我们来计算下

每个blockbitmap248行数据

每行有640/1

转化为二进制,每一位可以表示4extent的状态

那么一个datafile可以表示248 * 64 *4 *(8-3+1) = 380928个使用或空闲的状态

是不是一个datafile最大就可以管理380928extent呢?

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

请登录后发表评论 登录
全部评论

注册时间:2009-07-29

  • 博文量
    57
  • 访问量
    94441