Oracle rowid

简介:
Rowid 是表的伪列,它用于惟一标识表行,并且间接给出了表行的物理位置,是定位表行最快的方式,使用insert语句插入数据时,oracle会自动生成rowid并将其值与表数据一起存放到表行中,oracle提供了扩展rowidoracle 8及以后)和受限rowid8i以前)两种rowid类型,
8i以前rowidfile#+block#+row#组成,占用6bytes的空间,10 bit  file# 22 bit  block# 16 bit  row#(如下图)
由上图可以看到,数据文件地址有32bit,其中file#10bitblock#22bit
由于不存在0编号文件所以理论上一个数据库最大文件数为2^10-1=1023
而一个文件可以有包含2^22blocks
如果db_block_size4kdatafile max size就是2^22*4k =16G
如果db_block_size8kdatafile max size就是2^22*8k =32G
oracle 8开始rowid变成了extend rowid,由data_object_id#+rfile#+block#+row#组成,占用10bytes的空间
由于rowid的组成从file#变成了rfile#,所以数据文件数的限制也从整个库不能超过1023个变成了每个data_object_id不能超过1023个数据文件

查看rowid(本文讨论oracle10g)

rowid 10个字节的存储空间,显示结果为18个字符, 1-6(object_id#), 7-9(rfile#), 10-15(block#), 16-18(row#),可以使用dbms_rowid函数把它们都调出来.如下:
SQL> select rowid ,
dbms_rowid.rowid_object(rowid) obj_id# ,
dbms_rowid.rowid_relative_fno(rowid) rfile# ,
dbms_rowid.rowid_block_number(rowid) block# ,
dbms_rowid.rowid_row_number(rowid) row#
from t
where rownum < 10;
 
ROWID                        OBJ_ID#     RFILE#    BLOCK#     ROW#
---------------------------------- -----------------
AAAHwuAABAAALmaAAA      31790          1      47514          0
AAAHwuAABAAALmaAAB      31790          1      47514          1
AAAHwuAABAAALmaAAC      31790          1      47514          2
AAAHwuAABAAALmaAAD      31790          1      47514          3
AAAHwuAABAAALmaAAE      31790          1      47514          4
AAAHwuAABAAALmaAAF      31790          1      47514          5
AAAHwuAABAAALmaAAG      31790          1      47514          6
AAAHwuAABAAALmaAAH      31790          1      47514          7
AAAHwuAABAAALmaAAI      31790           1      47514          8
 
简单使用
由于rowid惟一标识表行,并且间接给出了表行的物理位置,所以当我们查出block#后可以查到此行数据存放的具体位置
由上面的查询结果可以看到前9行记录的block#都为47514,这些block#所在的rfile#都为1,当知道rfile#就可以使用dba_data_files表查看它的具体位置.
查看dba_data_files表结构
SQL> desc dba_data_files
 Name                                      Null?    Type
 -------------------------- ----------------------------
 FILE_NAME                                          VARCHAR2(513)
 FILE_ID                                                NUMBER
 TABLESPACE_NAME                              VARCHAR2(30)
 BYTES                                                 NUMBER
 BLOCKS                                              NUMBER
 STATUS                                               VARCHAR2(9)
 RELATIVE_FNO                                      NUMBER
 AUTOEXTENSIBLE                                 VARCHAR2(3)
 MAXBYTES                                           NUMBER
 MAXBLOCKS                                        NUMBER
 INCREMENT_BY                                     NUMBER
 USER_BYTES                                        NUMBER
 USER_BLOCKS                                     NUMBER
查看数据file_id=1的物理位置
SQL> col file_name format a50
SQL> select file_name,file_id from dba_data_files where file_id=1;
 
FILE_NAME                                                 FILE_ID
------------------------------------ --------------
/u01/oradata/denver/system01.dbf             1
可见此行数据保存在/u01/oradata/denver/system01.dbf数据文件中.




本文转自 vfast_chenxy 51CTO博客,原文链接:http://blog.51cto.com/chenxy/168646,如需转载请自行联系原作者

目录
相关文章
|
分布式计算 Oracle 关系型数据库
在Flink中使用CDC同步Oracle中的RowID
在Flink中使用CDC同步Oracle中的RowID
576 1
|
SQL Oracle 关系型数据库
|
Oracle 关系型数据库 数据库
|
Oracle 关系型数据库 数据库
|
SQL Oracle 关系型数据库
Oracle中的ROWID实现(r10笔记第95天)
一直以来,Oracle的发展是如火如荼,依然非常成熟,无论是行业的人员和资料的丰富程度。对于数据库的体系结构的内容,下面这张图我估计很多DBA都快看吐了,每次一提起体系结构,总是会看到这张图。
1068 0
|
SQL Oracle 关系型数据库
spool命令、创建一个表,创建并且copy表,查看别的用户下的表,rowid行地址 索引的时候使用,表的增删改查,删除表,oracle的回收站
  1、spool命令 spool "D:\test.txt" spool off SQL&gt; host cls 2、创建一个表 SQL&gt; --条件(1):有创建表的权限,(2):有表空间 SQL&gt; desc t4;  名称                                      是否为空? 类型
1515 0
|
Oracle 关系型数据库 MySQL
mysql中实现行号,oracle中的rowid
mysql中实现行号需要用到MYSQL的变量,因为MySql木有rownumber。   MYSQL中变量定义可以用 set @var=0 或 set @var:=0   可以用=或:=都可以,但是如果变量用在其他语句中,如:select那么必须用:=,因为=会被当作一个比较符号   1 select @rownum:=@rownum+1 as rownum, b.* from (select @rownum:=0) a, b   这个很有用哦,比如要取到排名好多的。
1674 0
|
Oracle 关系型数据库
【整理】黄伟作品:10g OCP之007研究 and Oracle之RowID研究
本文内容来自:http://www.boobooke.com 黄伟作品: 10g OCP之007研究 - 01在线播放:http://www.boobooke.com/v/bbk5486 黄伟作品: 10g OCP之007研究 - 02在线播放:http://www.
792 0