数据库是存储数据的容器,它的主要功能是保存和共享数据。sql
oracle数据库的存储结构能够分为逻辑存储结构和物理存储结构,对于这两种存储结构,oracle是分别进行管理的。数据库
接下来咱们对上面的两种结构进行详细的介绍。oracle
1.逻辑存储结构
图 1 Oracle 逻辑存储结构
函数
图 2 Oracle 逻辑存储结构
ui
如图 1和图 2 所示,oracle在逻辑上将保存的数据划分为一个个小单元来进行存储和维护,更高一级的逻辑存储结构都是由这些基本的小单元组成的。spa
逻辑结构类型按照尺寸从小到大分可分为:块(block)-->区(extent)-->段(segment)-->表空间(tablespace)操作系统
块(Block).net
Oracle用来管理存储的最小单元,也是最小的逻辑存储结构。Oracle数据库在进行输入输出时,都是以块为单位进行读写操做的。咱们建议数据块的尺寸为操做系统块尺寸的整数倍(一、二、4等)。另外,块的大小是在建立数据库的时候决定的,以后不能修改。固然,oracle同时也支持不一样的表空间拥有不一样的数据块尺寸。下面,咱们对块的结构进行一些介绍。日志
块的头部信息区:code
注意:以上两个参数既能够在表空间级别进行设置,也能够在段级别进行设置。段级别的设置优先级更高。
区(Extent)
比块高一级的逻辑存储结构,由连续的块组成,它是oracle在进行存储空间的分配和回收的最小单位。在建立具备独立段结构的数据库对象时,例如表、索引等,Oracle会为数据库对象建立一个数据段,并为数据段分配一个‘初始区’。
后续区的分配方式,则根据表的空间管理办法不一样,而采用不一样的分配方式,例如autoextent,uniform size 或者在建立表或表空间时设置default storage 子句。
另外,用户还可以经过执行下面的命令来回收表、索引等对象中未使用的区:
SQL>alter table table_name deallocate unused;
段(Segment)
由多个区组成,这些区能够是连续的,也能够是不连续的。当用户在数据库中建立各类具备实际存储结构的对象时(保存有数据的对象),好比表、索引等,Oracle将为这些对象建立“段”。 通常一个对象只拥有一个段。
在建立段时,能够为它指定PCTFREE、PCTUSED等参数来控制其中的块的存储空间管理方式,也能够为它指定INITIAL、NEXT、PCTINCREASE等存储参数,以指定其中区的分配方式。若是没有为段指定这些参数,段将自动继承表空间的相应参数。
不一样类型的数据库对象拥有不一样类型的段:
表空间(Tablespace)
最高级的逻辑存储结构,数据库是由多个表空间组成的。在建立数据库时会自动建立一些默认的表空间,例如 SYSTEM表空间,SYSAUX表空间等。经过使用表空间,Oracle将全部相关的逻辑结构和对象组合在一块儿。咱们能够在表空间级别指定存储参数,也能够在段级别指定。
下面咱们列出常见的表空间,和它们所存储的信息:
最后,咱们能够用下面的比喻来描述逻辑结构关系:
块 (一张张白纸) ---> 区(白纸组成的本子)---> 段(多个本子放到一个文件袋中)---> 表空间(存放多个文件袋的文件柜)
2.物理存储结构
Oracle数据库逻辑上由一个或多个表空间组成,每一个表空间在物理上由一个或多个数据文件组成,而每一个数据文件是由数据块构成的。因此,逻辑上数据存放在表空间中,而物理上存储在表空间所对应的数据文件中。咱们能够用下图来描述数据文件和表空间的关系。
图 3 Oracle 逻辑存储结构和物理存储结构对应关系
图 4 Oracle 逻辑存储结构和物理存储结构对应关系
构成数据库的物理文件主要有三种:
更多内容请参考:《Oracle 体系结构详解》