Oracle 数据存储结构_1

本文介绍Oracle数据库如何通过数据文件、表空间、段等结构管理数据存储。解释了数据块、数据扩展的概念及其在数据增长时的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文只讨论使用文件方式来存储数据的情况,对于采用裸设备及其它方式还没有接触, 或许以后会有时间了解一下.  这里所说的存储的数据是指表记录数据以及索引数据. 

Oracle用来存储数据的文件称为数据文件(Data file),  这个数据文件就对应操作系统中的文件. 大多数的小型数据库会使用单文件来保存数据库的所有数据.  这样会有一个限制, 就是文件的大小有能超过操作文件大小的最大值(这个值和操作系统地址位数有关), 当然在64位机上可能不算一个限制.

Oracle 做为一个大型数据库, 而且常采用单数据库多方案工作模式, 其数据存储容量可能很容易就会达到其上限, 因而Oracle采用多个文档来保存数据,  为降低表(table)确定存储位置的复杂性, Oracle用表空间(tableSpace)来管理这些文件的总体存储空间. 

 一个表空间包含至少一个文件, 一个文件只能属于一个表空间, 组成表空间文件的总大小就是表空间的大小. 因而表空间大小也可以增长, 有两种方式:

a. 增加新的文件到表空间中.

 

b. 增加属于表空间的文件的大小.

Oracle 支持为表和索引指定存储位置(即表空间). 使用(Segment) 来表示表或索引的所有的存储空间. 存储表数据的段叫数据段(Data Segment), 存储索引数据的段叫索引段(Index Segment).

随着表记录的增长, 会要更多的空间来存储数据. 这就涉及到是一次就为段分配一个很大空间来满足未来的需要, 还是在不空间不足时增加其空间呢? 显然要采用后一种方式. 另一个问题是在需要追加空间时, 要加多少呢?

Oracle 采用另外两种结构来处理这种需求, 一个较小单位叫数据块(Data Block), 和一个较大结构数据扩展(Data Extent). 数据块是Oracle 的基本I/O(输入/输出)单位, 一般设为操作系统I/O单位的整数倍 ----为什么要设成这样自己体会一下. 数据数据扩展是数据块的整数倍, 用于数据段需要扩展时增加的容量.  这个值是多大呢, 对于不同的表一般不一样, 也是可以通参数来设置.

当用户创建数据表时,Oracle为此表的数据段分配一个包含若干数据块的初始数据扩展(initial extent)。虽然此时数据表中还没有数据,但是在此初始数据扩展中的数据块已经为插入新数据做好了准备。
如果一个段的初始数据扩展中的数据块都已装满,且有新数据插入需要空间时,Oracle自动为这个段分配一个增量数据扩展(incremental extent)。增量数据扩展是一个段中继已有数据扩展之后分配的后续数据扩展,她的容量大于或等于之前的数据扩展。因而
数据块, 扩展,  段的关系类似于如下图:

随着记录不断增多, 表及索引需要追加数据扩展, 表空间也要增加新文件来增大容量因此, 表数据在表空间及文件中的存储关系类似下图:

附: 本文图片来自于oracle concepts文档

参考资料

Oracle concepts 10g 中文版R2    http://www.zw1840.com/oracle/translation/concepts

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值