ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于oracle中的row piece

关于oracle中的row piece

原创 Linux操作系统 作者:tengrid 时间:2009-05-18 19:40:11 0 删除 编辑

有部分初学者在看oracle docs中关于row format的描述时可能会有个疑问,既然row会移动或链接,那它在不同的block中的部分的地址是不是会变化?

 

要解答这个问题,还得从rowid的结构说起

<这里需补充rowid的结构说明>

显然rowid是包括了block address的,既然一个记录行被分布到了不同的block,那这几个不同的部分当然具有不同的rowid

下面再引申说明row的格式组成

1,我们知道,row是由一个或多个piece组成的,下面是一些基本的规则

2, 如果columns <256,且能在一个block中存储,那么只有一个 piece

3, 如果columns>=256,且能在一个block存储,那么每行的第256列以后形成的piece会与1-255列组成的piece 链接在一起,这种情况叫做intra-blockchaining; 即跨内链接

4, 如果不能在一个block中存储,那么就会有多个pieces chained在一起.每个piece在一个block中; 或者原来以一个piece存储在一个block中,后来因update,导致在一个block中存储不下,必须跨块存储; 这种情况是跨块链接

不管是块内链接还是块间链接,piece之间都是通过piece的rowid来连接的,实际上相当于一个单向链表

所以不难理解row piece的格式中包括了"Rowid of chained row pieces":

Row Overhead
Number of Columns
Cluster Key ID (if clustered)
ROWID of Chained Row Pieces (if any)
Column Length
Column Value

当我们根据rowid 来fetch有多个piece的行时(select,update,delete)

server process只需要找到第一个piece的rowid即可,因为它的header中包含有下一个piece的rowid,如此类推;process可以根据这个关系拿到所有的piece然后组装起来,返回给用户

有关row format及在row在cluster的情况下的表现可以参见<>P116

 

有空再补充dump块来验证上述规则的测试过程

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

下一篇: 配置NFS
请登录后发表评论 登录
全部评论

注册时间:2009-05-18

  • 博文量
    136
  • 访问量
    381303