- 浏览: 193044 次
- 性别:
- 来自: 杭州
-
文章分类
最新评论
rowid定义:
每一个表中都有一列rowid(iot表除外),每一行的rowid代表了该行在数据库中存储的实际地址。rowid是伪列(pseudocolumn),伪劣的意思是实际上这一列本身在数据字典中并不存在,在查询结果输出时它被构造出来的。在操作上它和普通的列也有一些差别:不能通过desc以及select直接显示出来,除非显式说明,rowid不能做表的primarykey ,也不能对rowid执行dml操作。
SQL> select rowid ,
substr(rowid ,1,6) data_object_id ,
substr(rowid ,7,3)rfile#,substr(rowid,10,6) block_id,
substr(rowid ,16,3) bject_rowid from GEDB.CMSADMIN
where rownum <2;
ROWID DATA_OBJECT_ID RFILE# BLOCK_ID OBJECT_ID
--------------- ------------ ------ ------------ ------
AAAi8dAAEAAAxi0AAA AAAi8d AAE AAAxi0 AAA
这里显示出来的是64进制数,oracle在设计rowid时用A~Z表示0-25,用a~z表示26-51,用0~9表示52-61,用+表示62,用/表示63。
即:AAAi8d========> A =0 A=0 A=0 i = 34 8 = 60 d= 29
SQL> select34*power(64,2) + 60*64 + 29 from dual ;
34*POWER(64,2)+60*64+29
----------------------
143133
SQL> selectobject_id , data_object_id from dba_objects where object_name='CMSADMIN' andowner='GEDB';
OBJECT_ID DATA_OBJECT_ID
---------- --------------
143133 143133
可以用同样的方法计算 RFILE# ,BLOCK_ID , BJECT_ID
oracle还提供了一个package:dbms_rowid,利用dbms_rowid中的几个函数可以很容易的把rowid拆分成10进制数:
SQL> select dbms_rowid.rowid_object('AAAi8dAAEAAAxi0AAA') objectid ,
dbms_rowid.rowid_relative_fno('AAAi8dAAEAAAxi0AAA') fileno,
dbms_rowid.rowid_block_number('AAAi8dAAEAAAxi0AAA') blockid ,
dbms_rowid.rowid_row_number('AAAi8dAAEAAAxi0AAA') rowno
from dual ;
OBJECTID FILENO BLOCKID ROWNO|
---------- ---------- ---------- ----------
143133 4 202932 0
dbms_row中还有几个非常有用的函数:
参见: http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_rowid.htm
ROWID_TO_ABSOLUTE_FNO(rowid) 可以实现rfile#(相对文件号) 到file#(绝对文件号)的转化。
This functionextracts the absolute file number from a ROWID, where the file number isabsolute for a row in a given schema and table. The schema name and the name ofthe schema object (such as a table name) are provided as IN parametersfor this function.
ROWID_TO_EXTENDED 可以实现从restricted rowid到extended rowid的转化。
This functiontranslates a restricted ROWID that addresses a row in a schema andtable that you specify to the extended ROWID format. Later, it may beremoved from this package into a different place.
ROWID_CREATE 可以实现创建一个rowid
This function lets you create a ROWID, given the component parts as parameters.
This is useful fortesting ROWID operations, because only the Oracle Server can create a validROWID that points to data in a database.
语法:
DBMS_ROWID.ROWID_CREATE(
rowid_type IN NUMBER,
object_number IN NUMBER,
relative_fno IN NUMBER,
block_number IN NUMBER,
row_number IN NUMBER)
RETURN ROWID;
参数的描述:
rowid_type
Type (restricted or extended). Set the rowid_typeparameter to 0 for a restricted ROWID. Set it to 1 to create an extended ROWID.
If you specify rowid_type as 0, then the required object_numberparameter is ignored, and ROWID_CREATE returns a restricted ROWID.
object_number Dataobject number (rowid_object_undefined for restricted).
relative_fno Relative file number.
block_number Block number in this file.
row_number Returns row number in this block.
用这个的作用:
数据块损坏,如果是用户查询某个表报block损坏的时候可以通过block算出具体的行
2)查询被锁定的具体行是会用到,请参考另一个文章:如果查询被锁定的具体行
如何查询被锁的对象请参加:
http://hi.baidu.com/wa0362/blog/item/4e06aa87f732732cc75cc33a.html
发表评论
-
oracle树操作,异步查询,子节点过多分批查询
2014-04-11 15:31 1079oracle树操作链接 select ... -
oracle数组游标批量插入
2013-12-07 16:40 3402declare type ary is table ... -
MERGE into (用法笔记)
2013-11-05 14:01 1034MERGE INTO trackedVehicleBus ... -
Oracle 随机取一行数据
2012-11-19 19:34 1420从表中随机取一条数据 select * from ( ... -
(原) ORACLE10g创建SCHEDULER_JOB
2012-08-03 16:07 1739BEGIN SYS.DBMS_SCHEDULER ... -
PL/SQL Developer使用技巧
2012-07-18 14:12 19281、PL/SQL Developer记住登陆密码 ... -
Oracle体系结构之-物理结构(transshipment)
2012-06-16 09:35 901一、物理文件的分类 ... -
oracle Toad使用指南
2012-06-19 08:34 6237一.Toad功能综述二. ... -
Oracle 超长字段的处理
2012-06-17 08:50 3327ORACLE中的大对象: LONG: 可变长的字符 ... -
oracle Optimizer CBO RBO (优化器)
2012-06-13 08:34 1140Oracle 的优化器有两 ... -
共享锁和排它锁
2012-06-12 08:23 10081.共享锁【S锁】 又称读锁,若事务T对数据对象 ... -
oracle with admin option 和with grant option
2012-06-20 08:29 1620with admin option 用于系统权限授权,w ... -
oracle10 新功能DBMS_SCHEDULER 简介
2012-06-13 08:40 4023Oracle 10g新增了scheduler的功能,功能 ... -
ORACLE 用户自定义异常
2012-06-21 12:57 59101CREATE OR REPLACE PROCEDURE te ... -
ORACLE SGA的结构、功能和一般设置
2012-06-17 08:50 1094System global area(SGA) 是一组共享的内 ... -
oracle中的检查点Ckpt和SCN号
2012-06-12 08:28 5683Checkpoint checkpoint是用来减少在数 ... -
oracle表之间的关联方式
2012-06-14 08:42 1489oracle表之间的关联方 ... -
oracle中使用on delete cascade
2012-06-15 08:38 7819oracle中使用on delete ca ... -
关于oracle的行级锁
2012-06-17 08:52 1057在oracle中,行级锁只对用户正在访问的行进行锁定。 ... -
oracle 10g 创建job 相关-dbms_scheduler.create_job
2012-06-19 08:35 8590grant create job to somebody ...
相关推荐
此外,还可以使用Oracle的内置存储过程来解析ROWID,以获取更详细的信息。 总的来说,理解ROWID对于优化Oracle数据库的操作至关重要,无论是进行快速的数据访问还是分析数据存储结构。掌握ROWID的使用和解析,有助...
比如,dbms_rowid包提供了多个函数,可以帮助我们构建和解析Rowid。通过这些函数,我们可以编写脚本实现复杂的数据处理逻辑。 了解和利用Rowid对于提升数据库性能,优化SQL查询语句以及进行数据库管理都有极大的...
Oracle 数据块解析是理解 Oracle 数据库内部工作原理的关键部分。数据块是数据库进行最小 I/O 操作的单位,它包含了存储在表、索引和其他数据库对象中的数据。在这个过程中,我们将通过一系列步骤来了解数据块的内部...
在Oracle SQL中,`ROWID`和`ROWNUM`是两个非常重要的概念,它们在数据库查询和操作中扮演着关键角色。本篇文章将详细解析这两个概念及其应用。 **ROWID** `ROWID`是Oracle数据库中一个特殊的伪列,它为每一行数据...
ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表...
本文将详细解析Oracle 11g中几种关键的索引类型,包括B-tree索引、反向索引、降序索引、位图索引以及函数索引等。 B-tree索引是Oracle中最常使用的一种索引类型,它的结构基于二叉树,其构成包括分支块和叶子块。在...
1. 选择最有效率的表名顺序:在基于规则的优化器中,Oracle 的解析器按照从右到左的顺序处理 FROM 子句中的表名。因此,在包含多个表的连接查询中,需要选择记录条数最少的表作为基础表。如果有三个以上的表连接查询...
在基于规则的优化器中,Oracle 的解析器按照从右到左的顺序处理 FROM 子句中的表名。因此,在 FROM 子句中写在最后的表(基础表)将被最先处理。在 FROM 子句中包含多个表的情况下,需要选择记录条数最少的表作为...
在Oracle中,DBMS_ROWID是一个非常重要的包,它提供了对ROWID的处理和解析,ROWID是Oracle用来唯一标识表中每一行的一个物理地址。下面将详细介绍这个包的功能以及与之相关的Oracle知识点。 DBMS_ROWID包包含了一...
### 数据库面试题3:Oracle笔试与Oracle例题解析 #### 一、选用适合的Oracle优化器 在Oracle数据库管理中,优化器的选择对于SQL查询的执行效率至关重要。Oracle提供了三种不同的优化器模式: 1. **基于规则的优化...
"oraclesequence_百度百科.mht"可能会详细解析如何创建和使用序列,以及序列在保持数据唯一性、避免并发问题等方面的角色。 这些网页资料涵盖了Oracle数据库中关键的元素,对于理解Oracle数据库的操作和管理至关...
* Oracle 在解析 SQL 语句的时候,对于“*”将通过查询数据库字典来将其转换成对应的列名 * 建议列出所有的 Column 名称,而不是简单的用“*”来替代 八、减少访问数据库的次数 * 执行每条 SQL 语句时,Oracle 在...
为了减少重复解析SQL语句带来的开销,Oracle会在系统全局区(SGA)的共享池中缓存已解析的SQL语句及其执行计划。这种方式称为共享SQL语句,它可以显著提高SQL执行的性能并减少内存使用。 - **字符级的比较**:共享...
以上是基于提供的文件信息总结出来的Oracle数据库知识点,涵盖了数据导出、数据导入、DUAL 表以及ROWID和ROWNUM的相关概念和使用方法。这些知识点对于Oracle数据库的学习和日常管理工作非常重要。
Oracle的共享SQL语句机制存储解析后的语句在SGA的共享池中,减少解析开销,提高执行效率。相同的SQL语句(包括空格、换行等)会被视为同一个语句进行共享。但多表连接查询不支持高速缓冲。数据库管理员需要合理配置...
Oracle动态性能表是数据库管理员用来监控Oracle数据库性能的关键工具,其中包含了多个系统状态指标,能够帮助我们理解数据库的运行情况并进行性能优化。以下是一些主要的性能指标及其含义: 1. CPU used by this ...
在基于规则的优化器中,ORACLE 的解析器按照从右到左的顺序处理 FROM 子句中的表名。如果有多个表连接查询,需要选择记录条数最少的表作为基础表。如果有三个以上的表连接查询,就需要选择交叉表(intersection ...
为了减少SQL语句的重复解析和提高执行效率,Oracle提供了SQL语句共享机制。 1. **共享池**:在SGA(System Global Area)中有一个名为共享池的内存区域,用于存储已解析的SQL语句及其执行计划。这样,当相同的SQL...
- **解析**: Oracle中的ROWID是一种特殊的数据类型,可以唯一标识表中的每一行。DB2在v8版本中增加了对类似ROWID的支持,允许用户更方便地进行行级别的操作。 ##### 7. 数字转换 **Oracle**: `select to_number('...