ITPub博客

首页 > 数据库 > Oracle > oracle数据块的内部结构分析

oracle数据块的内部结构分析

原创 Oracle 作者:lqding1980 时间:2008-06-19 17:32:52 1 删除 编辑

数据块包含三层:Cache layer、Transaction layer、Data layer
Cache layer
1, Block format 数据块格式(标识那一版本Oracle产品的块,Oracle7 or Oracle8)
cache header提供损坏数据检查信息,确保数据块被正确的读写。
2, Type 类型(table、index、header and so on)
3, SCN
4, Data Block Adrress
5, Sequence number (seq#)
6, Flag 标识这个块的状态 C=committed B=rollback 等等

The Cache Layer is 20 bytes and is described by the structure kcbh.

Transaction layer
1, common partition
(块类型,做后一次块清除的时间,ITL的数量,空闲列表链,空闲空间锁)
2, variabe partition
(ITL --感兴趣的事务列表)

Row data
1, Row header
-- 行的大小
-- Row flag (这行是不是行首,第一列,最后一列在不在其中等) 判断是否有行迁移和行链接。
-- lock type
-- column count

2, Column data
-- 列的序号
-- column length (行大小小于250 byte,占一位,否则占用3位)
-- 列的内容

PCTFREE and PCTUSED

PCTFREE
--保留数据块中空间供块中已经存在的数据行更新数据(行数据变大)。
PCTFREE的值是一个占数据总大小的百分比。
在数据块没有达到PCTFREE之前,free space用来向块中插入新行和data header大小的增长。

PCTUSED 当数据块free space小于PCTFREE以后,PCTUSED用来决定什么时候这个块再次变成可以插入新的数据。
假设 PCTFREE=20% PCTUSED=%40
当块的空间使用量第一次达到80%(1-PCTFREE)时,禁止向块中插入新的数据。
这时,就算删除了块中的数据,使使用量<80%,也同样不能向块中插入数据。只有当块使用量块才能再次插入新的数据。


Tail -- 一个块的最后四个字节,用来做块的健康检查,防止块的撕裂。
正常的Tail中包含了与Cache layer中的相同信息(SCNBase,Block Type and SCN Seq#)

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8858072/viewspace-1005850/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-08-12

  • 博文量
    12
  • 访问量
    38241