先对 rowid 有个感官认识:
select ROWID from Bruce_test where rownum<2;
ROWID
----------------------------
AAABnlAAFAAAAAPAAA
ROWID 的格式如下:
数据对象编号 文件编号 块编号 行编号
OOOOOO FFF BBBBBB RRR
我们可以看出,从上面的 rowid 可以得知:
AAABnl 是数据对象编号
AAF 是相关文件编号
AAAAAP 是块编号
AAA 是行编号
怎么依据这些编号得到具体的十进制的编码值呢,这是经常遇到的问题。这里需要明白 rowid 的是基于 64 位编码的 18 个字符显示(数据对象编号 (6) + 文件编号 (3) + 块编号 (6)+ 行编号 (3)=18 位 ),其中
A-Z <==> 0 - 25 (26)
a-z <==> 26 - 51 (26)
0-9 <==> 52 - 61 (10)
+/ <==> 62 - 63 (2)
共 64 位,明白这个后,就可以计算出 10 进制的编码值,计算公式如下:
d * (b ^ p)
其中: b 就是基数,这里就是 64 , p 就是从右到左,已 0 开始的位置数
比如:上面的例子
文件号 AAF, 具体的计算应该是 :
刚才提到的是 rowid 的显示方式: 基于 64 位编码的 18 个字符显示,其实 rowid 的存储方式是: 10 个字 节即80位存储,其中 数据 对象编号 需 要 32 位,相关文件 编号 需 要 10 位,块 编号 需 要 22, 位行 编号 需 要 16 位,由此,我们可以得出:
32bit 的 object number ,每个数据库最多有 4G 个对象
10bit 的 file number ,每个对象最多有 1022 个文件( 2 个文件预留)
22bit 的 block number ,每个文件最多有 4M 个 BLOCK
16bit 的 row number ,每个 BLOCK 最多有 64K 个 ROWS
5*(64^0)=5 ;
0*(64^1)=0 ;
0*(64^2)=0 ;
文件号就是 0+0+5=5
rowid 相关的有用的 sql
最简单的基于 rowid 的显示方式得到的响应的 64 位编码对应值的 sql :
select rowid ,
substr(rowid,1,6) "OBJECT",
substr(rowid,7,3) "FILE",
substr(rowid,10,6) "BLOCK",
substr(rowid,16,3) "ROW"
from TableName;
分享到:
相关推荐
比如,dbms_rowid包提供了多个函数,可以帮助我们构建和解析Rowid。通过这些函数,我们可以编写脚本实现复杂的数据处理逻辑。 了解和利用Rowid对于提升数据库性能,优化SQL查询语句以及进行数据库管理都有极大的...
Oracle中的ROWID是一个至关重要...掌握ROWID的使用和解析,有助于提升数据库管理效率,并对索引的工作原理有更深入的认识。通过ROWID,数据库管理员可以更加熟练地进行数据定位和性能优化,确保数据库系统的高效运行。
本篇文章将详细解析这两个概念及其应用。 **ROWID** `ROWID`是Oracle数据库中一个特殊的伪列,它为每一行数据提供了一个唯一的物理地址,类似于内存中的指针。`ROWID`由一系列字符组成,表示了数据在数据块中的...
### Tcl语言基础:解析文件与配置管理 #### 一、应用范围及背景介绍 TCL(Tool Command Language)是一种轻量级的脚本语言,它以其简洁性、易学性和强大的扩展能力而在自动化脚本编写领域占有一席之地。尤其是在...
通过查询 `DBMS_ROWID` 包含的函数,可以获取该行数据所在的文件号(`file#`)和块号(`block#`)。在这个例子中,数据位于文件号 6 的第 135 块。 接下来,使用 `ALTER SYSTEM DUMP DATAFILE` 语句转储特定文件号...
当尝试使用 ALTER TABLE DROP 删除某个 ROWID 时,如果该 ROWID 已经存在并被使用,则会导致此错误。这意味着该 ROWID 不能被删除,因为仍然有记录关联着它。 **解决方法:** - 在删除 ROWID 之前,确认该 ROWID ...
三、ROWID的详细解析 1. ROWID的结构:ROWID由数据对象编号、文件编号、块编号和行编号组成,分别对应32位、10位、22位和16位的二进制数,占用10个字节的空间。这使得ROWID能够唯一地标识数据库中的任何一行。 2. ...
本文将深入探讨两者的区别,并通过实例解析它们在查询中的行为。 首先,rownum是一个“伪数列”,它并不是数据库中实际存储的列,而是在查询过程中动态生成的。rownum表示结果集中每一条记录的顺序号,从1开始递增...
15. table fetch by rowid: 使用ROWID获取的总列数,常发生在索引访问或指定ROWID的查询中。 16. table scans (rows gotten/blocks gotten): 全表扫描时获取的行数和块数,提供了数据库扫描活动的视图。 17. user ...
8. **删除重复记录**:使用ROWID进行删除操作可以高效地去除重复记录,因为它避免了逐行比较。 9. **使用TRUNCATE替代DELETE**:TRUNCATE用于删除整个表内容,速度快且不使用回滚段,但不适用于部分删除。DELETE...
在Oracle中,DBMS_ROWID是一个非常重要的包,它提供了对ROWID的处理和解析,ROWID是Oracle用来唯一标识表中每一行的一个物理地址。下面将详细介绍这个包的功能以及与之相关的Oracle知识点。 DBMS_ROWID包包含了一...
我们可以对MySQL的对象(表、索引、触发器、自建函数、存储过程等)做注释(comment)...3) 表的访问路径,是全表扫描,还是索引扫描,还是直接利用rowid。 4) 表之间的连接类型 5) 表之间的连接顺序 6) 语句的并行程度
此方法适用于只需要考虑单一字段(如ID)的情况,通过找出具有相同ID但非最小ROWID的记录来进行删除。 **SQL语句:** ```sql DELETE FROM table_name WHERE id IN ( SELECT id FROM table_name GROUP BY id ...
为了不重复解析相同的 SQL 语句,在第一次解析之后,ORACLE 将 SQL 语句存放在内存中。这块位于系统全局区域 SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享。因此,...
本文主要探讨了Oracle数据库中的三种分页方法:基于ROWNUM的分页、基于ROW_NUMBER()解析函数的分页和基于ROWID的分页。首先,我们创建了一个名为stu的测试表,包含学生的基本信息,如学号、考试号、姓名、专业、考试...
"oraclesequence_百度百科.mht"可能会详细解析如何创建和使用序列,以及序列在保持数据唯一性、避免并发问题等方面的角色。 这些网页资料涵盖了Oracle数据库中关键的元素,对于理解Oracle数据库的操作和管理至关...
AND rowid NOT IN (SELECT MIN(rowid) FROM vitae GROUP BY peopleId, seq HAVING COUNT(*) > 1); ``` **解析**: - 子查询根据`peopleId`和`seq`分组并计算重复次数。 - 外层删除语句删除除了每个组合中的最小`...
ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表...
本文将详细解析Oracle 11g中几种关键的索引类型,包括B-tree索引、反向索引、降序索引、位图索引以及函数索引等。 B-tree索引是Oracle中最常使用的一种索引类型,它的结构基于二叉树,其构成包括分支块和叶子块。在...