本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。
Oracle数据库中的"段":数据存储的基本单位
什么是段?
想象一下Oracle数据库就像一个大型仓库,而"段"就是这个仓库里的各种储物柜。每个储物柜专门存放不同类型的东西,比如有的放表格数据,有的放索引信息。这些储物柜就是Oracle中的"段"——它们是占用实际存储空间的基本单位。
常见的段类型
1. 表段(Table Segment)
这是最常见的段类型,就像仓库里专门存放商品清单的柜子。当我们创建一张普通表时,Oracle就会自动创建一个表段来存储数据。
2. 索引段(Index Segment)
相当于仓库的目录索引柜,帮助快速找到需要的商品。比如主键约束就会自动创建索引段,就像给商品编号方便查找。
3. 特殊存储柜:LOB段
当需要存储大文件(如图片、长文档)时,Oracle使用专门的LOB段:
- LOBSEGMENT:实际存放数据内容的大柜子
- LOBINDEX:记录这些大件物品存放位置的索引
4. 分区段(Partition Segment)
就像把一个大柜子分成多个小格子,每个分区段只存储表或索引的一部分数据,方便管理和查询。
5. 簇段(Cluster Segment)
这是一种特殊的存储方式,可以把相关联的数据(比如订单和订单明细)物理上存放在相邻位置,提高查询效率。
段的空间管理
Oracle提供了两种管理这些"储物柜"空间的方式:
自动管理(ASSM) - 推荐使用
就像智能储物柜系统:
- 自动调节空间使用
- 只需设置基本参数(PCTFREE)
- 管理简单高效
手动管理(MSSM) - 传统方式
需要DBA像仓库管理员一样:
- 手动设置各种参数
- 精细控制每个细节
- 管理复杂,适合特殊需求
实际创建表时的段情况
当我们执行一个简单的建表语句时:
CREATE TABLE 商品信息 (
商品编号 INT PRIMARY KEY,
商品描述 CLOB,
商品图片 BLOB
) SEGMENT CREATION IMMEDIATE;
实际上Oracle会创建多个段:
- 表段 - 存储基本商品信息
- 索引段 - 用于主键约束
- 两个LOB段 - 分别存储商品描述(CLOB)和商品图片(BLOB)
- 两个LOB索引 - 管理大对象的位置
重要提示
现代Oracle版本(11g R2以后)默认使用"延迟段创建"功能,只有实际插入数据时才会创建段。这就像先规划好储物柜位置,等真正有东西要存时才分配实际空间。但企业版才支持这个功能,在不同版本间迁移时需要注意兼容性问题。
理解这些"段"的概念,就像了解仓库的储物柜系统,能帮助我们更好地设计和管理Oracle数据库的存储结构。
------------------作者介绍-----------------------
姓名:黄廷忠
现就职:Oracle中国高级服务团队
曾就职:OceanBase、云和恩墨、东方龙马等