ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于文件头保留块信息的存储探索

关于文件头保留块信息的存储探索

原创 Linux操作系统 作者:红叶DBA 时间:2011-04-27 21:50:37 0 删除 编辑
今天又探索了一回文件头保留块的存储结构了,
又进一步的了解了文件头保留块的存储及作用。

本次实验我分了两种情况:
1、本地管理中,如果是 uniform. size分配,那么文件头保留块如何记录?
2、本地管理中,如果是 system allocation,那么文件头保留块如何记录?
ps:本人为了命令回显 sqlplus = rlwrap sqlplus /nolog


下面附上实验过程:

实验一:uniform. size分配,那么文件头保留块如何记录?

1、创建一个uniform. size 128k 的表空间 TEST。

SYS:33@hongye > create tablespace test datafile size 5m segment space management auto uniform. size 128k;

Tablespace created.

SYS:33@hongye > select tablespace_name,allocation_type from dba_tablespaces where tablespace_name='TEST';

TABLESPACE_NAME                ALLOCATIO
------------------------------ ---------
TEST                           UNIFORM

SYS:33@hongye > col file_name for a60
SYS:33@hongye > select file_id,file_name,tablespace_name from dba_data_files where tablespace_name='TEST';

   FILE_ID FILE_NAME                                                    TABLESPACE_NAME
---------- ------------------------------------------------------------ ------------------------------
         6 /oracle/oradata/HONGYE/datafile/o1_mf_test_6vhxxnbw_.dbf     TEST

2、导出相关文件的保留块,导出文件记为 file1。

HONGYE:42@hongye > alter system dump datafile 6 block min 2 block max 8;

System altered.

HONGYE:42@hongye > @get_tracefile

trace file name
----------------------------------------------------------------------------------------------------
/oracle/admin/hongye/udump\hongye_ora_2134.trc

3、退出并重新登录,以便于获得新的 dump 文件,
否则,所有的 dump 文件都写到一个文件中,不利于查看。


SYS:42@hongye > exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

[oracle@DBA6U0 udump]$ sqlplus

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Apr 27 19:32:42 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

IDLE > conn hongye/hongye
Connected.

4、在表空间中创建一个对象 TEST,并插入数据,使得该对象占用一定数量的 extents。

HONGYE:42@hongye > create table test tablespace test as select * from dba_objects where rownum<1001;

Table created.

HONGYE:42@hongye > insert into test select * from test;

1000 rows created.

。。。。。。

HONGYE:42@hongye > insert into test select * from test;

16000 rows created.

HONGYE:42@hongye > commit;

Commit complete.

HONGYE:42@hongye > analyze table test compute statistics;

Table analyzed.

5、再次导出相关数据文件的文件头保留块,导出文件记为 file2。

HONGYE:42@hongye > alter system dump datafile 6 block min 2 block max 8;

System altered.

HONGYE:42@hongye > @get_tracefile

trace file name
----------------------------------------------------------------------------------------------------
/oracle/admin/hongye/udump\hongye_ora_2264.trc

6、查询 TEST 表占用的数据块情况。

HONGYE:42@hongye > select table_name,tablespace_name,blocks,empty_blocks from user_tables;

TABLE_NAME                     TABLESPACE_NAME                    BLOCKS EMPTY_BLOCKS
------------------------------ ------------------------------ ---------- ------------
DEPT                           HONGYE                                 26            0
EMP                            HONGYE                                 26            0
T                              HONGYE                                 26            0
TEST                           TEST                                  610           14

HONGYE:42@hongye > select segment_name,file_id,block_id,blocks from dba_extents where segment_name='TEST';

SEGMENT_NAME                                                                         FILE_ID   BLOCK_ID     BLOCKS
--------------------------------------------------------------------------------- ---------- ---------- ----------
TEST                                                                                       6          9         16
TEST                                                                                       6         25         16
TEST                                                                                       6         41         16
TEST                                                                                       6         57         16
TEST                                                                                       6         73         16
TEST                                                                                       6         89         16
TEST                                                                                       6        105         16
TEST                                                                                       6        121         16
TEST                                                                                       6        137         16
TEST                                                                                       6        153         16
TEST                                                                                       6        169         16
TEST                                                                                       6        185         16
TEST                                                                                       6        201         16
TEST                                                                                       6        217         16
TEST                                                                                       6        233         16
TEST                                                                                       6        249         16
TEST                                                                                       6        265         16
TEST                                                                                       6        281         16
TEST                                                                                       6        297         16
TEST                                                                                       6        313         16
TEST                                                                                       6        329         16
TEST                                                                                       6        345         16
TEST                                                                                       6        361         16
TEST                                                                                       6        377         16
TEST                                                                                       6        393         16
TEST                                                                                       6        409         16
TEST                                                                                       6        425         16
TEST                                                                                       6        441         16
TEST                                                                                       6        457         16
TEST                                                                                       6        473         16
TEST                                                                                       6        489         16
TEST                                                                                       6        505         16
TEST                                                                                       6        521         16
TEST                                                                                       6        537         16
TEST                                                                                       6        553         16
TEST                                                                                       6        569         16
TEST                                                                                       6        585         16
TEST                                                                                       6        601         16
TEST                                                                                       6        617         16

39 rows selected.

小结:

先贴上 file1 和 file2 两个文件相关内容:

file1:           --Before for uniform. size

File Space Header Block:
Header Control:
RelFno: 6, Unit: 16, Size: 640, Flag: 1
AutoExtend: NO, Increment: 0, MaxSize: 0
Initial Area: 7, Tail: 632, First: 0, Free: 39
Deallocation scn: 0.0
......(略去一些不相干的内容)
File Space Bitmap Block:
BitMap Control:
RelFno: 6, BeginBlock: 9, Flag: 0, First: 0, Free: 63488
0000000000000000 0000000000000000 0000000000000000 0000000000000000
......

file2:--Alter for uniform. size

File Space Header Block:
Header Control:
RelFno: 6, Unit: 16, Size: 640, Flag: 1
AutoExtend: NO, Increment: 0, MaxSize: 0
Initial Area: 7, Tail: 632, First: 39, Free: 0
Deallocation scn: 928878.0
......(略去一些不相干的内容)
File Space Bitmap Block:
BitMap Control:
RelFno: 6, BeginBlock: 9, Flag: 0, First: 39, Free: 63449
......

注意到:
RelFno: 6       表示dump出来的文件的相对文件号。
Unit:16,     表示在该数据文件(其实应该是该表空间中所有的数据文件)中的分配单元为16,
也就是说,每个位图标志位所记录的内容都对应一个拥有16个Block的extent。
First: 39       占用了39个 Unit,也就是39个extent(这一点可以从第 6 步中看出来)
Free: 0         还可以分配的 Unit 数目
(这也证实了为什么在插入中会出现 ORA-01653: unable to extend table HONGYE.TEST by 16 in tablespace TEST)
Free: 63449     这是表示这个块中可用的标志位的剩余情况,并不一定会完全用的完,这取决于你创建时设置的大小。
BeginBlock: 9   表示此处记载的是从9号Block开始的extent分配情况。


重点比较:
File1:0000000000000000
File2:FFFFFFFF7F000000
发现,两者的主要区别是前几位的标志位改变了,现在将16进制的标志位转化为2进制:
FFFFFFFF7F = 1111 1111 1111 1111 1111 1111 1111 1111 0111 1111
考虑到Linux中的Endian Format,则进一步转化为:
FFFFFFFF7F = 1111 1111 1111 1111 1111 1111 1111 1111 1111 1110
这下,清楚了,有39个1,刚好对应39个已经分配了的 extent。
而且,这39个 extent 是连续的,从dump文件和第6步的查询中,都可以反映出这一点。



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

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

注册时间:2010-08-19

  • 博文量
    54
  • 访问量
    69638