##第一. Oracle 存储结构
###1. 表数据的存储过程
创建表时,也会创建用于保存其数据的段。表空间包含一个段集合。
从逻辑上来说,表包含多行列值。行最终以行片段的形式存储在数据库块中。之所以将其称为“行片段”,是因为在某些情况下可能不会在一个位置存储整个行。当插入的行太大而无法装入单个块时,或当更新导致现有行超出了其当前空间时,就会发生这种情况。
###2. 数据库块
- 块头:块头包含段类型(如表或索引)、数据块地址、表目录、行目录和事务处理插槽。每个插槽的大小为24字节,修改块中的行时会使用这些插槽。块头自上而下进行增长。
- 行数据:这是块中行的实际数据。行数据空间自下而上进行增长。
- 可用空间:可用空间位于块的中部,允许头和行数据空间在必要时进行增长。当插入新行或用更大的值更新现有行的列时,行数据会占用可用空间。 导致块头增长的事件的示例包括: - 行目录需要更多的行条目 - 需要的事务处理插槽数多于最初配置的数目
块中的可用空间最初是相邻的。但是,删除和更新操作可能会使块中的可用空间变成碎片。需要时Oracle 服务器会接合块中的空闲空间。
###3. 表空间和数据文件
表空间:
- 只能属于一个数据库
- 包括一个或多个数据文件
- 可进一步划分为逻辑存储单元
数据文件:
- 只能属于一个表空间和一个数据库
- 是存储方案对象数据的资料档案库
###4. 表空间中的空间管理
本地管理的表空间:
- 空闲区是在表空间中管理的。
- 使用位图记录空闲区。
- 每一位对应于一个块或一组块。
- 位值指示空闲区或占用区。
- 建议使用本地管理的表空间。
字典管理的表空间:
- 空闲区是在数据字典中管理的。
- 分配或取消分配区后会更新相应的表。
- 支持这些表空间仅仅是为了实现向后兼容。