ORACLE数据库中的ROWID

转载 2007年09月22日 21:36:00
我们可能对oracle的rowid的使用并不陌生,不过,如果仔细分析一下,发现其还是有些知识点。
  
  1、rowid是一个伪列,是用来确保表中行的唯一性,它并不能指示出行的物理位置,但可以用来定位行。 2、rowid是存储在索引中的一组既定的值(当行确定后)。我们可以像表中普通的列一样将它选出来。
  
  3、利用rowid是访问表中一行的最快方式。
  
  4、rowid需要10个字节来存储,显示为18位的字符串。
  
  rowid的组成结构为:
  
  data object number(6位字符串)+relative file number(3位字符串)+block number(6位字符串)+row number(3位字符串),如:AAAADeAABAAAAZSAAA
  
  5、我们可以借助oracle提供的包dbms_rowid,来对rowid进行解析从而获取关于行的相关信息:
  
  bossdb-SQL>select
  2 rowid,
  3 dbms_rowid.rowid_object(rowid) obj_id,
  4 dbms_rowid.rowid_relative_fno(rowid) df#,
  5 dbms_rowid.rowid_block_number(rowid) blknum,
  6 dbms_rowid.rowid_row_number(rowid) rowno
  7 from p_test where rownum<5;
  ROWID OBJ_ID DF# BLKNUM ROWNO
  ------------------ ---------- ---------- ---------- ----------
  AAAQ+tAANAAAC6SAAA 69549 13 11922 0 AAAQ+tAANAAAC6SAAB 69549 13 11922 1 AAAQ+tAANAAAC6SAAC 69549 13 11922 2 AAAQ+tAANAAAC6SAAD 69549 13 11922 3
  
  我们可以看到,通过rowid_row_number得到的行号是从0开始的,这是和rownum伪列的一个不同之处。我猜测rowid_row_number在求行号的时候是计算首行的偏移量。
  
  一般来说,当表中的行确定后,rowid就不会发生变化。
  
  但当如下情况发生时,rowid将发生改变:
  
  1、对一个表做表空间的移动后
  
  2、对一个表进行了EXP/IMP后  

相关文章推荐

Oracle ROWID 方式访问数据库

和ROWNUM一样,ROWID是一个伪列,即是一个非用户定义的列,而又实际存储于数据库之中。每一个表都有一个ROWID列,一个ROWID值用于唯一确定数据库表中的的一条记录。因此通过ROWID 方式来...

在oracle中灵活使用Rownum和rowId

  • 2009年07月11日 18:04
  • 5KB
  • 下载

oracle rowid

  • 2011年04月17日 14:35
  • 81KB
  • 下载

Oracle数据库建模与设计

ORACLE是一种适用于大型、中型和微型计算机的关系数据库管理系统,它使用SQL(Structured guery language)作为它的数据库语言。   SQL主要包括数据定义、数据操纵(包括查...

oracle_SQL中rowid与rownum的使用

  • 2010年11月07日 18:34
  • 206KB
  • 下载

【绝密外泄】风哥Oracle数据库DBA高级工程师培训视频教程与内部资料v0.1

【绝密外泄】风哥Oracle数据库DBA高级工程师培训视频教程与内部资料v0.1 由于是【绝密外泄】资料,防止被查,需要的小伙伴赶紧下载附件中的课件文档。 由于视频太大了,已放在百度网盘了...

利用DBLink+JOB实现两个Oracle数据库之间的数据同步

这里通过DBLink+JOB实现两个Oracle数据库之间的数据同步,我自己测试了两个数据库之间的一个表同步没有问题,下面写个详细例子供大家参考; 第一步:建立DBLink   两个数据库,源数据...

java向oracle数据库中插入当前时间

public class Test{ public static void main (String args []){ java.util.Date a = new java.util.Da...

Oracle数据库中的锁机制

数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。 在数据库中有...
  • liuyiy
  • liuyiy
  • 2014年05月04日 22:09
  • 8141
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORACLE数据库中的ROWID
举报原因:
原因补充:

(最多只允许输入30个字)