文中大部分观点均来自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的变化
分享到:
相关推荐
oracle rowid rownum 等组成原理
mysql虚拟了一个rowid(类似跟oracle的rowid)--SQL语句
Oracle数据库rowid深入探析.pdf
Oracle学习笔记(rownum和rowid),有具体的代码案例讲解rownum和rowid
基于Oracle RowID实现批量数据的分页下载.pdf
oracle 数据库 rowid与rownum的使用
总结一下几种查找和删除重复记录的方法,适用于有大量重复记录的情况
利用rowid快速在线更新海量数据 利用rowid快速在线更新海量数据
oracle error invalid rowid
举例介绍在oracle中rownum和rowId的不同以及使用方法
oracle_SQL中rowid与rownum的使用
oracle_SQL中ROWID与ROWNUM的使用 很有用哦
ROWID是ORACLE中的一个重要的概念。用于定位数据库中一条记录的一个相对唯一地址值。通常情况下,该值在该行数据插入到数据库表时即被确定且唯一。ROWID它是一个伪列,它并不实际存在于表中。它是ORACLE在读取表中...
oracle_SQL中 rowid 和rownum的使用
1.2.3 怎样配置符合 OFA 的 Oracle 文件 系统 1.3 规划数据库文件布局 1.3.1 最大化可用性的规划 1.3.2 最小化磁盘争用的规划 1.4 建立参数文件 1.4.1 配置参数的一些注意事项 1.4.2 建立参数文件的连接 ...
对一个大表进行UPDATE,DELETE,如果在一个SESSION里面运行SQL,很容易引发undo不够, 或者由于一些原因,导致回滚,这个是灾难
sql学习 oracle 行定位与rowid描述.sql
试论Rowid在Oracle数据库中的应用.pdf