`
lihao2372
  • 浏览: 5622 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

oracle的rowid相关

阅读更多
文中大部分观点均来自Thomas Kyte的《Expert.Oracle.Database.Architecture.9i.and.10g.Programming.Techniques.and.Solutions》一书

1 ALTER TABLE 表名 ENABLE ROW MOVEMENT 允许oracle改变分配给每行的rowid。否则flashback时会报“ORA-08189: cannot flashback the table because row movement is not enabled”。rowid是在insert时分配的。flashback会对表做delete再重新插入,因此可能分配到不同的新rowid.

2 10g以前,查询dual会产生对数据字典中一个真实的名为“dual”表的全表扫描。SELECT DUMMY FROM DUAL或者SELECT rowid FROM DUAL会在oracle所有版本观察到I/O.如果在9i及之前的版本查询sELECT SYSDATE FROM DUAL或者在PL/SQL中书写variable := SYSDATE都会发生真实的I/O。但在10g,SELECT SYSDATE被视为不需要查询dual表并按照类似于调用函数的方式。因此,如果仅取sysdate,就不再全表扫描dual了

3 rowid仅在同一表中唯一,不同表的可能出现相同的rowid

4 B*Tree index底层叶节点存放rowid

5 可能导致rowid发生变化的操作:
  1)update分区表用于分区的列,使得某行必须由一个分区移动到另一个
  2)move操作(移动表所属的表空间)和一些分区操作比如splitting or merge  partitions(拆分或者合并分区)
  3)用ALTER TABLE SHRINK SPACE做segment shrink(表收缩,通过insert+delete重组数据使数据分布更紧密,同时降低HWM释放空闲数据块)
  4)更新索引组织表(iot)的主键

6 rowid可以随时变化,不推荐将其物理存储在数据库表列中,使用rowid作为列的数据类型会被视为“bad practice”加以避免。应使用主键代替

7 rowid是找到表中一行的最快方式,可以用于update无索引和主键的表,但要求和其他条件一同使用以免受到rowid变化的影响

8 数据库间的copy或导入导出都会引起ROWID和UROWID的变化
分享到:
评论

相关推荐

    mysql虚拟了一个rowid(类似跟oracle的rowid)--SQL语句.sql

    mysql虚拟了一个rowid(类似跟oracle的rowid)--SQL语句

    Oracle数据库rowid深入探析.pdf

    "Oracle数据库rowid深入探析" Oracle数据库rowid是Oracle数据库中一个重要的概念,也是Oracle DBA考试中一个重要的知识点。rowid是Oracle数据库中的一种伪列,它可以唯一地标识表中的每一行。伪列类似于数据表的列...

    Oracle中用Rowid查找和删除表中的重复记录

    ### Oracle中用Rowid查找和删除表中的重复记录 在Oracle数据库管理中,处理重复记录是一项常见的需求,尤其是在数据量较大的情况下。本文将详细介绍如何利用Rowid这一特性来有效地查找和删除表中的重复记录。 ####...

    Oracle学习笔记(rownum和rowid)

    Oracle学习笔记(rownum和rowid),有具体的代码案例讲解rownum和rowid

    基于Oracle RowID实现批量数据的分页下载.pdf

    本文重点探讨了一种基于Oracle RowID实现批量数据分页下载的方法,这种方法可以有效提高效率并减少对数据库的压力。 RowID是Oracle数据库中用于唯一标识每一行数据的物理地址,它不是用户可见的列,但可以在SQL查询...

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

    Oracle的ROWID是一个重要的概念,它是数据库中每一行记录的物理地址标识,允许快速定位到数据存储的具体位置。ROWID由一系列的十六进制数字组成,包含数据对象编号、文件编号、块编号以及行编号,这四个部分共同构成...

    利用rowid快速在线更新海量数据

    **ROWID** 是 Oracle 数据库中一个非常重要的概念,它是一种特殊类型的列,用于唯一标识表中的一行数据。ROWID 的格式通常包含数据对象号 (Data Object Number)、相对文件号 (Relative File Number)、块号 (Block ...

    oracle error invalid rowid

    在Oracle数据库系统中,"invalid rowid"错误通常表示尝试访问的数据行的引用已经失效或者不存在。RowID是Oracle数据库中用于唯一标识表中每一行的一个物理地址,它由数据库内部生成并存储在数据块中。当遇到"invalid...

    oracle_SQL中rowid与rownum的使用

    虽然`ROWID`和`ROWNUM`都与表行相关,但它们的作用不同,有时可以结合起来使用。例如,当我们需要根据行号获取特定行的数据,而又不希望影响其他查询时,可以先使用`ROWNUM`筛选出行号,再用`ROWID`定位具体行。 四...

    rowid与rownumber

    rowid 和 rownum 是 Oracle 数据库中的两个重要概念,对于数据库开发人员来说非常重要。下面我们将详细介绍 rowid 和 rownum 的概念、结构、应用场景等。 一、rowid 概念 rowid 是 Oracle 数据库中的一个虚列,...

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

    Oracle数据库中Rowid是一个非常重要的概念,它代表了数据库中记录的唯一地址标识。每行记录在Oracle数据库中都会有一个Rowid,相当于一个物理地址,即使该行数据在数据库中发生了迁移,其Rowid也不会改变。在处理...

    oracle_SQL中ROWID与ROWNUM的使用

    ### Oracle SQL中ROWID与ROWNUM的使用 #### ROWNUM 的使用——TOP-N 分析 在 Oracle SQL 中,`ROWNUM` 是一种特殊的伪列,用于标识查询结果集中的行编号。它常用于实现 TOP-N 查询,即返回结果集中满足特定条件的...

    oracle_SQL-rowid--rownum.zip_oracle

    同时,从提供的压缩文件名来看,除了`oracle_SQL中rowid与rownum的使用.doc`直接相关外,其他文件如`ssi2配置整合步骤.doc`、`Spring事物配置.doc`、`Struts2防止表单重复提交.doc`、`SSH改造DAO.doc`涉及的是其他...

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

    在Oracle中,Rowid扮演着关键角色,它是一种伪列,用于唯一标识数据库中的每一行记录。Rowid包含了记录的物理存储位置信息,使得数据库能够快速定位和访问数据。 Rowid分为不同类型:Foreign Rowid、Logical Rowid...

    Oracle中的rowid

    ROWID是ORACLE中的一个重要的概念。用于定位数据库中一条记录的一个相对唯一地址值。通常情况下,该值在该行数据插入到数据库表时即被确定且唯一。ROWID它是一个伪列,它并不实际存在于表中。它是ORACLE在读取表中...

    在oracle中灵活使用Rownum和rowId

    此查询将返回根据 `ROWID` 排序的结果,可以看到 `ROWID` 与每条记录的实际位置有关,而不是根据 `MONTH` 列的值: ```plaintext ROWID ROWNUM MONTH SELL ------------------------------------------ 000000E4....

Global site tag (gtag.js) - Google Analytics