nescafeboy1 发表于 2018-9-25 11:16:29

Oracle ROWID-Oracle管理

  Oracle中的每个表都有一个rowid,它是一个18位字符组成字符串,例:AAAMoVAAAAAAAAUAAA.它包含的字符串由A-Z,a-z,0-9,+,/这些字符组成.是64进制.其中A-Z对应0-25,a-z对应26-51,0-9对应52-61,+对应62,/对应63.这个18位的字符串分成4段分别表示不同的意思(6,3,6,3),1-6位表示对象数据ID(段编号),7-9位代表数据文件编号,10-12位代表数据块编号,13-18代表在数据块中的行。
  例如:

  其中AAAMoV AAA AAAAAU AAA 代表意思如下:
AAAMoVAAAAAAAAUAAA 对象代码文件号块号行号
    ROWID是伪列,计算出来的,索引使用它,表中并没有存储rowid,每一行的rowid是根据该行的物理位置计算出来的,我们得到一个rowid可以获得该行的所在的物理位置,可以快速定位该行.我们也可以将指定的数构造出一个rowid。
  通过下列语句查询相关的对象代码,文件号,块号,行号
  SELECT ENAME,ROWID,
  DBMS_ROWID.ROWID_OBJECT(ROWID) OBJECT#,
  DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) FILE#,
  DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) BLOCK#,
  DBMS_ROWID.ROWID_ROW_NUMBER(ROWID) ROW#
FROM SCOTT.EMP;
页: [1]
查看完整版本: Oracle ROWID-Oracle管理