data block内部结构

block是oracle数据库中最基本的存储结构。(extents)盘区,(segment)段,(data file)数据文件都是由block构成的。一个oracle数据库中的block的大小在建立的数据库的时候就已经决定,在整个数据库的生命过程中不能修改;要修改block的大小只能重建数据库。 

查询数据库中block的大小: 

SQL> select value from v$parameter where name ='db_block_size'; 

VALUE 
--------------------------------------------------------------------- 
8192 

或者 SQL>show parameters db_block_size; NAME TYPE VALUE 
------------------------------------ ----------- ------- 
db_block_size integer 8192 
数据库中block的大小从2k to 32k,而且必须是2k的指数倍,即2k,4k,8k,16k,32k。这里是8192(即8k)。block的所能达到的最大值由操作系统决定。(注:在9i中可以为用户的表空间分配不同的block的大小)。 
Oracle数据库宏观上表现出来的特征都是由其内部结构,即block的结构决定的。Block的结构原比我们想象的复杂的多。Block主要有data block,index block,undo block,这三者有着不同的复杂结构。其中data block和index block离我们最近,下面先看看data block的结构。 

创建实验表: 

SQL>create table block_test 2 (id varchar2(4) primary key, 
3 name varchar2(20) 
4 ) tablespace users; 

表已创建。 
SQL> insert into block_test values ('0001','TOM'); SQL> insert into block_test values ('0002','xiyuan'); SQL> commit;  SQL>select dbms_rowid.rowid_relative_fno('AAAGF2AAIAAAAnbAAA') file_num, 

2 dbms_rowid.rowid_block_number('AAAGF2AAIAAAAnbAAA') block_num  3 from dual; 
file_num block_num 
---------------------- ------------------------------ 
8 2523 

由此得知这条记录存储在数据中的标号为8的数据文件的第2523个块中。 下面来看这条记录在数据库中存储的情况。 

SQL> select * from block_test; 

ID NAME 
---- -------------------- 
0002 xiyuan 
0001 TOM 查看方法如下: SQL>select id, dump(id) from block_test;  ID DUMP(ID) 
---- ------------------------------ 
0001 Typ=1 Len=4: 48,48,48,49 
0002 Typ=1 Len=4: 48,48,48,50  可见:第一列的数据类型1,为长度为4,数据为48,48,48,49。也就是说:数据‘0001’在数据库中是以48,48,48,49来存储的,同理数据‘0002’在数据库中是以48,48,48,50来存储的。数据在数据库中是以16进制存储的,而且和数据库所选择的字符集有很大的关系。 同理第二列: SQL>select name, dump(name) from block_test; 

NAME DUMP(NAME) 
-------------------- ---------------------------------------- 
xiyuan Typ=1 Len=6: 120,105,121,117,97,110 
TOM Typ=1 Len=3: 84,79,77 数据类型1,为长度为6,数据为120,105,121,117,97,110。也就是说:数据‘xiyuan’在数据库中是以120,105,121,117,97,110来存储的,同理数据‘TOM’在数据库中是以84,79,77来存储的。 以上信息就是我们刚才查找的那条记录在数据库中真实的存储情况  这是data block中最基本的一些东西,我们比较感兴趣的主要是最后的部分,数据在块中具体的存储情况。 

有兴趣的,可以做一些基本的dml(insert,delete,update)操作,来看数据块中发生了一些什么变化,可以得到一些很有用的信息。

猜你喜欢

转载自luanxiyuan.iteye.com/blog/1476069