`
java-mans
  • 浏览: 11710447 次
文章分类
社区版块
存档分类
最新评论

理解oracle ROWID

 
阅读更多

数据存放在数据文件中,其属性会随着存储而确定,这些属性包括:在哪个数据文件?属于哪个对象?所在的数据块?行号? 将这些属性合并起来就构成了oracle的ROWID。

所以,rowid详细的记录了数据在磁盘上的位置。简单讲,也叫行地址

ROWID可分:物理和逻辑。除了IOT使用逻辑ROWID,其他类型的表使用物理ROWID。

ROWID也可分:受限和扩展。8i之后使用扩展rowid。

下面介绍扩展rowid。

扩展rowid,采用64位编码,按6、3开。

例子:

SQL> show user
USER 为 "HR"
SQL> drop table t1 purge;
drop table t1 purge
           *
第 1 行出现错误:
ORA-00942: 表或视图不存在


SQL> create table  t1 (id number,name varchar2(20));

表已创建。

SQL> insert into t1 values(1,'a');

已创建 1 行。

SQL> insert into t1 values(2,'b');

已创建 1 行。

SQL> commit;

提交完成。

SQL> select rowid,t1.* from t1;

ROWID                      ID NAME
------------------ ---------- ----------------------------------------
AAANFgAAEAAAAHYAAA          1 a
AAANFgAAEAAAAHYAAB          2 b


ROWID的64个编码表

base64表示 数字顺序
A~Z 0~25
a~z 26~51
0~9 52~61
+ 62
/ 63

id=1其对应的rowid为:AAANFg AAE AAAAHY AAA

AAANFg

段编号(对应dba_data_files的data_object_id)。请注意和object_id区别开。object_id是对象编号,唯一标识对象,是对象的身份证(与段编号不同:段一定是对象,但对象不一定是段)。物理位置改变,如移动表空间,则data_object_id便也改变了。对象名改变,则不影响object_id。truncate也会改变段编号,因为truncate是DDL语句,将表的元数据从数据字典删掉,同时退掉HWM,但数据是没有删掉的。

从上表可得:A=0 N=13 F=5 g=32

SQL> select 13*power(64,2)+5*64+32 from dual;

13*POWER(64,2)+5*64+32
----------------------
                 53600


我们也可以通过dbms_rowid这个包来求:

SQL> select dbms_rowid.rowid_object('AAANFgAAEAAAAHYAAA') from dual;

DBMS_ROWID.ROWID_OBJECT('AAANFGAAEAAAAHYAAA')
---------------------------------------------
                                        53600


AAE

相对文件编号 (relative_fno),表空间级别的。注意和绝对文件编号的区别(file_id),数据库级别的。

AAAAHY

数据块号

AAA

行号

ROWID在oracle中的地位不言而喻。索引的本质,也就是利用ROWID,因为索引保存了rowid,根据rowid再到数据表中定位记录。想象一本书,索引是目录,书的内容是数据,那么rowid便是联系目录和内容的那一个“页码”。

分享到:
评论

相关推荐

    Oracle数据库rowid深入探析.pdf

    "Oracle数据库rowid深入探析" Oracle数据库rowid是Oracle数据库中一个重要的概念,也是...Oracle数据库rowid是一个非常重要的概念,它可以帮助开发者更好地理解Oracle数据库的工作机理,并提高开发效率和数据库性能。

    oraclerowid在表行中的物理标识.pdf

    Oracle的ROWID是一个重要的概念,它是数据库中每一行记录的物理地址标识,允许快速定位到数据存储的具体位置。...因此,理解并掌握ROWID的含义和用法对于深入理解Oracle数据库的工作机制至关重要。

    oracle error invalid rowid

    在处理"invalid rowid"错误时,理解Oracle的内部工作原理和数据库维护的最佳实践至关重要。这包括了解如何有效地使用数据库工具,以及如何编写健壮的SQL查询,以防止因并发和数据变更导致的问题。同时,定期备份...

    oracle_SQL中rowid与rownum的使用

    在Oracle SQL中,`ROWID`和`ROWNUM`是两个非常重要的概念,它们在数据库查询和数据操作中起着至关重要的作用。本文将详细探讨这两个特性,包括它们的定义、用途以及如何在实际场景中有效利用它们。 一、ROWID详解 `...

    试论Rowid在Oracle数据库中的应用.pdf

    因此,理解Rowid的结构和特性对于数据库管理员(DBA)和开发者来说至关重要。 Rowid本身包含了一系列二进制数据,这些数据指示了数据行所在的文件号、块号和行号。在Oracle中,Rowid的格式并非一成不变,随着不同...

    浅析Rowid在Oracle数据库中的应用.pdf

    理解Rowid的内部机制、类型及其显示形式,对于数据库管理员和开发者来说,是提升数据库性能和实现精细管理的关键。通过深入学习和实践,我们可以更好地利用Rowid来优化数据库操作,提高系统整体的响应速度和稳定性。

    oracle_SQL-rowid--rownum.zip_oracle

    在实际开发中,理解并合理利用`ROWID`和`ROWNUM`,可以有效地提升Oracle数据库的管理和查询效率。同时,从提供的压缩文件名来看,除了`oracle_SQL中rowid与rownum的使用.doc`直接相关外,其他文件如`ssi2配置整合...

    Oracle中的rowid

    ROWID是ORACLE中的一个重要的概念。用于定位数据库中一条记录的一个...要理解索引,必须先搞清楚ROWID。B-Tree索引的每个索引条目具有两个字段。第一个字段表示索引的键值,对于单列索引来说是一个值;而对于多列索引

    在oracle中灵活使用Rownum和rowId

    ### 在Oracle中灵活使用Rownum和RowId 在Oracle数据库中,`ROWNUM` 和 `ROWID` 是两个非常重要的概念,它们可以帮助我们在查询数据时实现更灵活的数据管理。本文将详细介绍这两个概念的区别及其使用方法,并通过...

    oracle的一些相关网页介绍

    这些网页资料涵盖了Oracle数据库中关键的元素,对于理解Oracle数据库的操作和管理至关重要。ROWID帮助我们直接访问数据块,ROWNUM用于控制查询结果,视图提供了一种简化数据操作的方式,而序列则确保了数据的有序性...

    Oracle.DataAccess.Client_dll

    `RowidInfo`则涉及到Oracle的行标识符(ROWID),这是一个唯一的物理地址,可以快速定位数据库表中的每一行。`OracleDataReader`在执行查询后返回结果集时,可以获取ROWID信息,这对于数据的查找、跟踪和更新非常...

    Oracle和DB2的数据类型比较

    Oracle的ROWID类型可以直接对应到DB2/400中的ROWID类型,但在使用时需注意功能上的细微差别。 综上所述,Oracle和DB2/400在数据类型上存在显著差异,特别是在日期时间类型、数值类型、字符类型和大对象类型方面。...

    Oracle的游标学习

    理解并熟练掌握游标的使用,可以帮助我们编写出更加高效和灵活的PL/SQL程序。通过阅读提供的链接文章《PL-SQL游标-(抄) - owftc - JavaEye技术网站》(链接可能已失效),你可以获取更多关于游标使用的具体示例和...

    oracle标准库函数

    在Oracle中,DBMS_ROWID是一个非常重要的包,它提供了对ROWID的处理和解析,ROWID是Oracle用来唯一标识表中每一行的一个物理地址。下面将详细介绍这个包的功能以及与之相关的Oracle知识点。 DBMS_ROWID包包含了一...

    Tianlesoftware Oracle 学习手册(v1.0)高清完整PDF版

    ### Tianlesoftware Oracle 学习手册(v1.0)中的关键知识点 #### 1. ORACLE基础知识 ...这些知识点为Oracle初学者提供了一个良好的起点,帮助他们更好地理解和掌握Oracle数据库的核心功能和技术。

    Oracle中hint的理解篇

    ### Oracle中Hint的理解与应用 #### 一、Hint概述 在Oracle数据库中,Hint是一种用于指导优化器如何生成执行计划的特殊语法。当基于代价的优化器(Cost-Based Optimizer, CBO)未能选择出最优的执行计划时,可以...

    Oracle索引优化相关

    ### Oracle索引优化相关知识点详解 ...综上所述,正确地理解和运用Oracle索引的相关概念和技巧对于优化数据库性能至关重要。开发人员应该仔细考虑索引的设计和使用方式,避免由于不当使用而导致的性能问题。

Global site tag (gtag.js) - Google Analytics