逻辑存储结构包括数据块(data blocks),数据扩展(extents),数据段(segments),这些逻辑结构使Oracle可以精细地控制磁盘空间的使用。
1.表空间
一个数据库被分割为数个被称作表空间(tablespaces)的逻辑存储单位,每个表空间内保存的是一组相关的逻辑对象。
用户需要为每个表空间创建一个或多个数据文件来物理地存储属于此表空间的逻辑对象。一个表空间所有数据文件的大小就是此表空间的可用数据存储量。
Oracle10g创建数据库时会自动创建SYSTEM和SYSAUX两个表空间。数据库默认创建传统的Oracle表空间--小文件表空间(smallfile tablespace)。SYSTEM和SYSAUX就是以小文件表空间的形式创建的。
使用Oracle还可以创建大文件表空间(bigfile tablespaces)。这样Oracle数据库的表空间可以由一个单一的大文件构成的,而不是多个小的数据文件。这使Oracle可以发挥64位系统的能力,在64位系统中,Oracle数据库的存储能力扩展到了8 EB(1EB = 1024PB,1PB = 1024TB,1TB=1024GB)。此外,当启用了Oracle自动管理数据文件的模式后,大文件表空间使数据文件对用户完全透明。
表空间可以处于联机状态(可访问)或脱机状态(不可访问)。
2.Oracle数据块
在Oracle数据库中,最精细的数据存储粒度是数据块(data blocks)。一个数据块相当于磁盘上一段连续的物理存储空间。数据块分配的默认容量由初始化参数DB_BLOCK_SIZE决定。
3.数据扩展
更高一层的逻辑数据库结构是数据扩展(extent)。数据扩展是由一次存储空间分配而获得的数个连续数据块,用于存储信息。
4.段
在数据扩展之上的数据库逻辑存储结构是段(segment)。段是为一个特定逻辑结构分配的一组数据扩展。下表描述了不同种类的段:
Segment | Description |
|
数据段 | 非簇表只有一个数据段。表的所有数据存储在属于数据段的数据扩展中。 对于分区表,每个分区拥有一个数据段。
每个簇表只有一个数据段。簇中每个表的数据都存储在这个簇的数据段中。
|
索引段 | 每个索引有一个索引段来存储她的数据。 对于分区索引,每个分区有一个索引段。
|
临时段 | 当一个SQL语句在执行过程中需要临时空间时,Oracle将创建临时段。当语句执行结束后,临时段中的数据扩展由系统回收以备后用。 |
回滚段 | 如果数据库运行在自动撤销空间管理模式(automatic undo management mode)下,数据库服务器使用表空间来管理撤销空间(undo space)。Oracle建议使用自动撤销空间管理模式。
Oracle的早期版本使用回滚段来存储撤销信息。回滚段中的信息用于回滚未提交的事务,还在数据库恢复时生成 用于保证数据读一致性(read-consistent)的信息。
回滚段的空间管理十分复杂,Oracle已经放弃了这种方式。本文档只讨论通过撤销表空间(undo tablespace)来管理撤销操作的模式。 这消除了管理回滚段空间的复杂性,使管理员只需关注撤销信息要保存多长时间。
在Oracle10g中,只有SYSTEM还使用回滚段来处理系统事务。数据库中只有一个SYSTEM回滚段,她是在数据库创建(CREATE DATABASE)时被自动创建的, 这个回滚段只要实例启动就处于联机状态。用户无需执行任何操作来维护SYSTEM回滚段。 |
当一个段内已有的数据扩展的装满之后,Oracle动态地分配新空间。换句话说,段内已有的数据扩展装满之后,Oracle为这个段分配新的数据扩展。因为数据扩展是随需分配的,因此一个段内的数据扩展物理上未必是连续的。