存储结构
数据库划分为称为“表空间”的逻辑存储单元。每一个表空间可以包含很多的Oracle 逻
辑数据块。DB_BLOCK_SIZE 参数指定了逻辑块的大小。逻辑块的大小范围为2 KB 至
32 KB,默认大小为8 KB。Oracle 数据块是逻辑I/O 的最小单位。
特定数目的相邻逻辑块构成了“区”。为特定逻辑结构分配的一组区构成了一个段。
应挑选最常用的块大小作为标准块大小。在许多情况下,这是唯一需要指定的块大小。
通常,DB_BLOCK_SIZE 设置为4 KB 或8 KB。如果不设置此参数的值,则默认数据块
大小由操作系统决定,该大小通常已足够。除非重新创建数据库,否则创建数据库之后便
无法更改默认块大小。
如果数据库块大小与操作系统块大小不同,请确保数据库块大小是操作系统块大小的倍数。
表数据的存储过程
创建表时,也会创建用于保存其数据的段。表空间包含一个段集合。
从逻辑上来说,表包含多行列值。行最终以行片段的形式存储在数据库块中。之所以将其
称为“行片段”,是因为在某些情况下可能不会在一个位置存储整个行。当插入的行太大
而无法装入单个块时,或当更新导致现有行超出了其当前空间时,就会发生这种情况。
数据库块:内容
• 块头:块头包含段类型(如表或索引)、数据块地址、表目录、行目录和事务处理插
槽。每个插槽的大小为24 字节,修改块中的行时会使用这些插槽。块头自上而下进
行增长。
• 行数据:这是块中行的实际数据。行数据空间自下而上进行增长。
• 可用空间:可用空间位于块的中部,允许头和行数据空间在必要时进行增长。当插入
新行或用更大的值更新现有行的列时,行数据会占用可用空间。
导致块头增长的事件的示例包括:
- 行目录需要更多的行条目
- 需要的事务处理插槽数多于最初配置的数目<br />块中的可用空间最初是相邻的。但是,删除和更新操作可能会使块中的可用空间变成<br />碎片。需要时Oracle 服务器会接合块中的空闲空间。
表空间:
– 只能属于一个数据库
– 包括一个或多个数据文件
– 可进一步划分为逻辑存储单元
• 数据文件:
– 只能属于一个表空间和一个数据库
– 是存储方案对象数据的资料档案库
表空间和数据文件
数据库、表空间和数据文件彼此密切相关,但也存在不可忽视的差别。
• Oracle DB 包括一个或多个逻辑存储单元(其表空间),这些逻辑存储单元共同存储
数据库的所有数据。
• Oracle DB 中的每个表空间包括一个或多个数据文件,这些表空间使用与运行Oracle
软件的操作系统一致的物理结构。
• 数据库的数据作为一个整体存储在构成数据库每一个表空间的数据文件中。一个
Oracle DB 必须至少有两个表空间(必需的SYSTEM 和SYSAUX 表空间),每个表空
间包含一个数据文件。另一个数据库可能包括三个表空间,每一个表空间包含两个数
据文件(共有六个数据文件)。一个数据库最多可以有65,534 个数据文件。如果一
个表空间在其生存期内包含且只包含一个数据文件,则该表空间被定义为“大文件表
空间”。这是一种特殊情况,对数据仓库应用程序很有用。
• 临时文件是一个属于临时表空间的文件;它是使用TEMPFILE 选项创建的。临时表
空间不能包含永久数据库对象(例如表),并且通常用于排序。
表空间中的空间管理
本地管理的表空间:
– 空闲区是在表空间中管理的。
– 使用位图记录空闲区。
– 每一位对应于一个块或一组块。
– 位值指示空闲区或占用区。
– 建议使用本地管理的表空间。
字典管理的表空间:
– 空闲区是在数据字典中管理的。
– 分配或取消分配区后会更新相应的表。
– 支持这些表空间仅仅是为了实现向后兼容。
在表空间中以区为单位分配空间。创建表空间后可使用以下两种方法之一来跟踪空闲空间
和已用空间:
• 本地管理的表空间:在表空间中通过位图管理区。位图中的每个位都对应于一个块或
一组块。分配区或释放区后可以重新使用,Oracle 服务器通过更改位图值来显示块的
新状态。
• 字典管理的表空间:由数据字典管理区。每当分配或取消分配区后,Oracle 服务器会
更新数据字典中的相应表。这是为了实现向后兼容而提供的,建议使用本地管理的表
空间。
• 表空间信息:
- DBA_TABLESPACES
- V$TABLESPACE
• 数据文件信息:
- DBA_DATA_FILES
- V$DATAFILE<br />注:V$DBFILE 视图显示数据库中的所有数据文件。保留此视图是为了保持历史记录的一<br />致性。建议改为使用V$DATAFILE。
• 临时文件信息:
- DBA_TEMP_FILES
- V$TEMPFILE