日期:2014-05-16  浏览次数:20435 次

oracle 存储结构

?

总体来说oracle的逻辑结构和物理结构是由块、区、段、表空间、数据文件、控制文件、重做日志文件组成,我们来看看他们的基本特性。

?

1.?????

块是oracle管理存储空间的最小单元,一个块是由整数倍个操作系统块组成,假如我们是NTFS的硬盘分区格式,操作系统最小块为4K,那么我们的oracle的块就可能是4K8K12K等等,具体大小是由初始化参数DB_BLOCK_SIZE来确定的,不过这个参数是在安装oracle时确定的,一旦安装好oracle后即无法修改。

?

相对于块来说主要的操作参数有pctfree,pctused

a)Pctfree用于指定快中必须保留的最小空闲空间比列,如果你的表经常进行update操作的话,需要将空闲比列调大一点,因为update操作会消耗掉空闲空间,当一个块中的空闲空间因为太小而不够update操作消耗的话,系统就会增加新块,从而形成记录链接现象影响表的I/O功能。

b)pctused用于制定一个百分比,当块中已经使用的存储空间降低到这个百分比之下时,这个块材被重新标记为可用。这个参数是和pctfree配合使用的,pctused越大越有利于insert,pctfree越大越有利于update。当然这两个参数加起来不能超过100

?

1.?????

区比块高一级,是由一系列连续的块组成。Oracle在进行存储空间分配、回收和管理时都是以区为基本单位的。注意这里只有连续的块才能被“装备”成一个区。

??区里主要的参数是initial,next,pctincrease

or43.gif

上图:初始大小<->initial,下一个大小<-> next,增量<-> pctincrease

具体含义很明确吧。

如上图,oracle首先将分配一个64K的初始区,满了之后再分配一个64K的后续区,满了就再分配第二个96K(64K+64K*50%)的后续区,再满了就分配144K(96K+96K*50%)的后续区,依次类推吧。

当然你也可以修改这些参数,不过参数修改之后,新的分配方式只有在以后为对象分配新的区时才会生效。

?? ?上图的STORAGE这个关键词就是显式分区语句。通过在create table附加storage语法就能创建分区表。

1.?????

段是比区更高一级的逻辑存储结构,段由多个区组成。这些区可以是连续的,也可以是不连续的。当用户在数据库中创建各种具有实际存储结构的对象时oracle就将为这些实际对象(表、索引)创建段,这些对象将全部保存在其段中,一般情况下一个对象只会有一个段。上两节的两张图其实就是段的管理界面。在上面的图中我们可以设置PCTFREE,PCTUSED,INIRANS,INITIAL,NEXT,PCTINCREASE等参数。

可以看出到段这一级就已经和存储空间没多大关系了,段已经是独立的逻辑存储结构了。也就是说,当一个表的分配空间不够的时候,oracle就为这个段再添加一个或多个区以存储数据。以上的工作机理和mysql有点相似,和sql server就不太一样了。

简单的说oracle里的段有4种类型:

l?????????数据段

l?????????索引段

l?????????临时段

l?????????回退段

a.数据段:存放数据的段,oracle中所有未分区的表都使用一个段来保存数据,而分区的表将为每个分区建立一个独立的数据段。

?

b.索引段:存放索引条目的段,oracle中所有未分区的索引都使用一个段来保存数据,而分区的索引将为每个分区建立一个独立的数据段。

?

c.临时段:放临时数据的段。最好不要在SYSTEM表空间中存放临时段,以避免产生碎片。

?

d.回退段:保存回退条目,oracle将被修改的数据的初始化版本保存在回退条目中,利用这些信息,用户可使用撤销未提交的事务的方式来恢复崩溃的实例,也就是roll back啦。当然关于回退段展开讲的话可能会很深,这里就不多说了。而且回退段的概念在以后的oracle版本中可能会弃用。

?

2.?????表空间

表空间是最高一级的逻辑存储结构,oracle就是由若干个表空间组成。段就包含在表空间中。同过表空间,oracle就可以将相关的逻辑结构和对象组合在一起。比如我是我们学校的信息中心的DBA,那我就会将教务处,科研处,系办,后勤处等等分别创建成不同的表空间分别放在不同的硬盘上,这样可以避免I\O冲突和碎片。

?

对于表空间而言,除了普通的表空间外,oracle还有3个特殊的表空间