ROWID和UROWID

作者在 2007-12-19 10:13:42 发布以下内容
  • ROWID和UROWID

在Oracle内部,每个数据表都有一个伪列ROWID,用于存放被称为ROWID的二进制值。每个ROWID代表了一行数据的存储地址。物理ROWID能够标识普通数据表中的一行信息,而逻辑ROWID能够标识索引组织表(index-organized table)中的一行信息。其中ROWID类型只能存储物理内容,而UROWID(universal rowid)类型可以存储物理,逻辑或外来(non-Oracle)ROWID。

建议:只有在旧的应用程序中,为了兼容性我们才使用ROWID数据类型。对于新的应用程序,应该使用UROWID数据类型。

当我们把查询出来的ROWID放到ROWID变量时,可以使用内置函数ROWIDTOCHAR,这个函数能把二进制内容转换成18个字节的字符串;还有一个与之对应的CHARTOROWID函数,可以对该过程进行反操作,如果转换过程中发现字符串并不是一个有效的ROWID时,PL/SQL就会抛出预定义异常SYS_INVALID_ROWID。UROWID变量和字符串之间进行转换也可以直接使用赋值操作符。这时,系统会隐式地实现UROWID和字符类型之间的转换。

物理ROWID(Physical Rowid)可以让我们快速的访问某些特定的行。只要行存在,它的物理ROWID就不会改变。高效稳定的物理ROWID在查询行集合、操作整个集合和更新子集是很有用的。例如,我们可以在UPDATE或DELETE语句的WHERE子句中比较UROWID变量和ROWID伪列来找出最近一次从游标中取出的行数据。

物理ROWID有两种形式。10字节扩展ROWID格式(10-byte extended rowid format)支持相对表空间块地址并能辨识分区表和非分区表中的行记录。6字节限定ROWID格式支持向后兼容。

扩展ROWID使用检索出来的每一行记录的物理地址的base-64编码。例如,在SQL*Plus(隐式地将ROWID转换成字符串)中的查询:

 

SQLSELECT ROWID, ename
SQL>  FROM emp
SQLWHERE empno = 7788;
ROWID ENAME
------------------ ----------
AAAAqcAABAAADFNAAH SCOTT

OOOOOOFFFBBBBBBRRR这样的形式有四部分组成:

  1. "000000"代表数据对象号(data object number),如上例中的"AAAAqc",能够辨识数据库段。同一段中的模式对象,都有着相同的数据对象号。
  2. "FFF"代表文件号(file number),如上例中的"AAB",能辨识出包含行的数据文件。在数据库中,文件号是唯一的。
  3. "BBBBBB"代表块号(block number),如上例中的"AAADFN",能辨识出包含行的数据块。块号是与它们所在的数据文件相关,而不是表空间。所以,两个在同一表空间的行数据,如果它们处于不同的数据文件中,也可能有着相同的块号。
  4. "RRR"代表了行号(row number),如上例中的"AAH",可以辨识块中的行数据。

逻辑ROWID为访问特定行提供了最快的访问速度。Oracle在索引组织表基础上使用它们构建二级索引。逻辑ROWID没有持久的物理地址,当新数据被插入时,它的值就会在数据块上偏移。但是,如果一个行数据的物理位置发生变化,它的逻辑ROWID就无效了。

技术文章 | 阅读 4233 次
文章评论,共2条
zl芊芊zl(作者)
2007-12-20 15:17
1
rowid的定义规则 
=========================================================== 
作者: ly-winner(http://ly-winner.itpub.net)
发表于: 2006.01.17 16:13
分类: oracle技术文档 
出处: http://ly-winner.itpub.net/post/4626/50808
--------------------------------------------------------------- 

7~9位是表示的是数据文件,F表示5,
10~15位表示的是在这个数据文件中的第几个BLOCK,g表示32。
rowid编码相当于64进制。用A~Z a~z 0~9 + /共64个字符表示。
A表示0,B表示1,……,a表示26,……,0表示52,……,+表示62,/表示63。 对于多个数据文件的表空间,7~9位就是随机的
zl芊芊zl(作者)
2007-12-20 15:18
2
http://ly-winner.itpub.net/index.php
游客请输入验证码