Oracle的数据存储结构

Oracle的数据存储结构包括表空间(tablespace)、数据文件(data file)、段(segment)、extend和数据块(data block)。数据块是存储和操作的最小单位,有PCTFREE和PCTUSED等存储属性。段由extend组成,包括数据段、临时段等,临时段用于排序和中间数据处理,不记录redo log。表空间管理方式有字典管理和本地管理,可使用段压缩来优化存储。
摘要由CSDN通过智能技术生成

Oracle的数据存储结构

  • 表空间(tablespace)--Oracle中最大的逻辑存储单位
  • 数据文件(data file)--表空间物理存储载体
  • 段(segment)--Oracle中所有占用空间的对象的总称
  • extend--段的组成单位
  • 数据块(data block)--extend的组成单位,是Oracle存储和数据操作的最小单位。

数据块

数据块是Oracle存储和数据操作的最小单位,但不一定和操作系统的os块相同,一个数据块可能有多个os块构成。

数据块的存储属性

PCTFREE (percent free)

为一个块保留的空间百分比,表示数据块在什么情况下可以被insert,默认是10,表示当数据块的可用空间低于10%后,就不可以被insert了,只能被用于update;即:当使用一个block时,在达到pctfree之前,该block是一直可以被插入的,这个时候处在上升期。

PCTUSED (percent used)

当数据块的剩余空间达到PCTFREE之后就不可以insert了,但是进行的delete操作和update操作会释放数据块的空间,如果数据块的空间释放到了PCTUSED之后就可以开始insert数据了。

行链接和行迁移

行迁移——update操作引起的

当一条记录被更新时,数据库引擎首先会尝试在它保存的数据块中寻找足够的空闲空间,如果没有足够的空闲空间可用,这条记录将被拆分为两个部分,第一个部分包括指向第二个部分的rowid,该部分任然保留在原来的数据块中,第二个部分包含所有的具体数据,将保存到另外一个新的数据块中,这个就成为行迁移。

为什么不将整行都放到新的数据块中? 原因是这样会导致该行数据rowid发生变化,而rowid被存储在索引中,也有可能被客户端临时保存在内存中,rowid的变化可能导致查询错误。该行不仅存了本行id还有新行的id。相当于存入了指针,并且保留了头指针。

行链接——insert操作或者update操作引起的

行链接和行迁移不同,行链接是当一条记录太大,在一个数据块中无法存入,这时会被拆分为2个或以上的部分,存储在多个块中,这多个块之间会构造一个链

行链接的原因则可能为:

  • 直接插入大的记录;
  • 更新记
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值