文中大部分观点均来自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语句
"Oracle数据库rowid深入探析" Oracle数据库rowid是Oracle数据库中一个重要的概念,也是Oracle DBA考试中一个重要的知识点。rowid是Oracle数据库中的一种伪列,它可以唯一地标识表中的每一行。伪列类似于数据表的列...
### Oracle中用Rowid查找和删除表中的重复记录 在Oracle数据库管理中,处理重复记录是一项常见的需求,尤其是在数据量较大的情况下。本文将详细介绍如何利用Rowid这一特性来有效地查找和删除表中的重复记录。 ####...
Oracle学习笔记(rownum和rowid),有具体的代码案例讲解rownum和rowid
本文重点探讨了一种基于Oracle RowID实现批量数据分页下载的方法,这种方法可以有效提高效率并减少对数据库的压力。 RowID是Oracle数据库中用于唯一标识每一行数据的物理地址,它不是用户可见的列,但可以在SQL查询...
Oracle的ROWID是一个重要的概念,它是数据库中每一行记录的物理地址标识,允许快速定位到数据存储的具体位置。ROWID由一系列的十六进制数字组成,包含数据对象编号、文件编号、块编号以及行编号,这四个部分共同构成...
**ROWID** 是 Oracle 数据库中一个非常重要的概念,它是一种特殊类型的列,用于唯一标识表中的一行数据。ROWID 的格式通常包含数据对象号 (Data Object Number)、相对文件号 (Relative File Number)、块号 (Block ...
在Oracle数据库系统中,"invalid rowid"错误通常表示尝试访问的数据行的引用已经失效或者不存在。RowID是Oracle数据库中用于唯一标识表中每一行的一个物理地址,它由数据库内部生成并存储在数据块中。当遇到"invalid...
虽然`ROWID`和`ROWNUM`都与表行相关,但它们的作用不同,有时可以结合起来使用。例如,当我们需要根据行号获取特定行的数据,而又不希望影响其他查询时,可以先使用`ROWNUM`筛选出行号,再用`ROWID`定位具体行。 四...
Oracle中的ROWID是一个至关重要的概念,它在数据库系统中扮演着关键角色,为数据库记录提供了一个相对唯一的地址标识。ROWID并非实际存在于表结构中,而是一个由Oracle自动生成的伪列,它根据数据行的物理存储位置...
rowid 和 rownum 是 Oracle 数据库中的两个重要概念,对于数据库开发人员来说非常重要。下面我们将详细介绍 rowid 和 rownum 的概念、结构、应用场景等。 一、rowid 概念 rowid 是 Oracle 数据库中的一个虚列,...
Oracle数据库中Rowid是一个非常重要的概念,它代表了数据库中记录的唯一地址标识。每行记录在Oracle数据库中都会有一个Rowid,相当于一个物理地址,即使该行数据在数据库中发生了迁移,其Rowid也不会改变。在处理...
### Oracle SQL中ROWID与ROWNUM的使用 #### ROWNUM 的使用——TOP-N 分析 在 Oracle SQL 中,`ROWNUM` 是一种特殊的伪列,用于标识查询结果集中的行编号。它常用于实现 TOP-N 查询,即返回结果集中满足特定条件的...
同时,从提供的压缩文件名来看,除了`oracle_SQL中rowid与rownum的使用.doc`直接相关外,其他文件如`ssi2配置整合步骤.doc`、`Spring事物配置.doc`、`Struts2防止表单重复提交.doc`、`SSH改造DAO.doc`涉及的是其他...
在Oracle中,Rowid扮演着关键角色,它是一种伪列,用于唯一标识数据库中的每一行记录。Rowid包含了记录的物理存储位置信息,使得数据库能够快速定位和访问数据。 Rowid分为不同类型:Foreign Rowid、Logical Rowid...
此查询将返回根据 `ROWID` 排序的结果,可以看到 `ROWID` 与每条记录的实际位置有关,而不是根据 `MONTH` 列的值: ```plaintext ROWID ROWNUM MONTH SELL ------------------------------------------ 000000E4....