本篇文章给大家带来了关于Oracle的相关知识,其中主要介绍了关于rowid的相关问题,oracle数据库的表中的每一行数据都有一个唯一的标识符,或者称为rowid,在oracle内部通常就是使用它来访问数据的,希望对大家有帮助。
推荐教程:《Oracle学习教程》
一、rowid中保存信息概述
oracle数据库的表中的每一行数据都有一个唯一的标识符,或者称为rowid,在oracle内部通常就是使用它来访问数据的。rowid需要 10个字节的存储空间,并用18个字符来显示。该值表明了该行在oracle数据库中的物理具体位置。可以在一个查询中使用rowid来表明查询结果中包含该值。
保存rowid需要10个字节或者是80个位二进制位。一个扩展rowid采用10个byte来存储,共80bit,其中obj#32bit,rfile#10bit,block#22bit,row#16bit。所以相对文件号不能超过1023,也就是一个表空间的数据文件不能超过1023个(不存在文件号为0的文件),一个datafile只能有2^22=4M个block,,一个block中不能超过2^16=64K行数据。而一个数据库内不能有超过2^32=4G个object。
这80个二进制位分别是:
1. 数据对象编号,表明此行所属的数据库对象的编号,每个数据对象在数据库建立的时候都被唯一分配一个编号,并且此编号唯一。数据对象编号占用大约32位。
2. 对应文件编号,表明该行所在文件的编号,表空间的每一个文件标号都是唯一的。文件编号所占用的位置是10位。
3. 块编号,表明改行所在文件的块的位置块编号需要22位。
4. 行编号,表明该行在行目录中的具体位置行编号需要16位。
这样加起来就是80位。
备注:在oracle 8版本以前,rowid由file# block# row#组成,占用6个bytes的空间,10 bit 的 file# ,22bit 的 block# ,16 bit 的 row#。oracle8及之后版本改为10个bytes的空间。
Oracle的物理扩展ROWID有18位,每位采用64位编码,分别用A~Z、a~z、0~9、+、/共64个字符表示。A表示0,B表示1,……Z表示25,a表示26,……z表示51,0表示52,……,9表示61,+表示62,/表示63。
SELECT T.ROWID, T.* FROM DEPT T
为了验证rowid的存储空间为10字节,其中32bit的object#,10bit的rfile#,22bit的block#,16bit的row#。我们需要使用dump函数。
select rowid,dump(rowid,16) from DEPT
二、验证查看rowid内容
1、使用dbms_rowid包中函数查看
SELECT ROWID, DBMS_ROWID.ROWID_OBJECT(ROWID) AS OBJECT, DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) AS FILENUM, DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) AS BLOCK, DBMS_ROWID.ROWID_ROW_NUMBER(ROWID) AS ROWN FROM DEPT;
结果如下:
2、从表中查询数据信息
1)查询对象编号:DATA_OBJECT_ID
SELECT OBJECT_NAME, OBJECT_TYPE, SUBOBJECT_NAME, OBJECT_ID, DATA_OBJECT_ID FROM DBA_OBJECTS T WHERE T.OBJECT_NAME ='DEPT' AND T.OWNER = 'CHF';
结果如下:
说明:DATA_OBJECT_ID与OBJECT_ID的区别
object_id和data_object_id 都是对象的唯一标识。
object_id是对象的逻辑标识
data_object_id是对象的物理标识
只有表,索引,undo这些有实际物理存储位置的对象才有data_object_id。而对于没有物理存储的对象,data_object_id就是空。例如:(procedure,function,package,data type,db link,mv定义,view定义,临时表,分区表定义等等)
大多数情况下两者是相等的。但对object 进行truncate,move, rebuild 等操作后,data_object_id就会发生改变,而object_id不会改变。
对标DEPT执行truncate操作,代码:TRUNCATE TABLE DEPT;
再次查询结果:
将truncate前数据重新插入表中,查看rowid代表对象号的部分已发生变化由AAAUOO变为AAAUOP,增加了1。
2)查询文件编号:
SELECT T.SEGMENT_NAME, T.HEADER_BLOCK, T.BLOCKS, T.EXTENTS, T.RELATIVE_FNO FROM DBA_SEGMENTS T WHERE T.SEGMENT_NAME = 'DEPT' AND T.OWNER = 'CHF';
HEADER_BLOCK:本表的第一个数据块号
BLOCKS:本表的数据块数
RELATIVE_FNO:相对文件编号
结果如下:
说明:
从Oracle8开始,Oracle开始使用“相对文件号”,使原来一个数据库最多只能有1023个文件,扩展为一个表空间最多可以有1023个文件,每个库最多可以有65534个文件
验证文件号
SELECT T.TABLE_NAME, T.TABLESPACE_NAME, G.FILE_NAME, G.FILE_ID, G.RELATIVE_FNO FROM DBA_TABLES T INNER JOIN DBA_DATA_FILES G ON G.TABLESPACE_NAME = T.TABLESPACE_NAME WHERE T.TABLE_NAME = 'DEPT' AND T.OWNER = 'CHF';
执行结果:
因为创建用户时没用指定默认表空间,建表时也没用指定表空间,所以此处使用的USERS表空间(大家不必在意这些细节...),可以看到文件号和相对文件号都是 4 ,这是因为我的数据库中每个表空间只有一个数据文件,如果一个表空间有多个数据文件,这两个值有可能不一样。
知识扩展:
我们可以使用跟踪文件查看数据文件信息,命令:alter session set events 'immediate trace name FILE_HDRS level 10';
执行完此代码后,将在数据库服务器生成一个跟踪文件,查看文件路径代码:
select u_dump.value || '/' || db_name.value || '_ora_' || v$process.spid || nvl2(v$process.traceid, '_' || v$process.traceid, null ) || '.trc' "Trace File" from v$parameter u_dump cross join v$parameter db_name cross join v$process join v$session on v$process.addr = v$session.paddr where u_dump.name = 'user_dump_dest' and db_name.name = 'db_name' and v$session.audsid=sys_context('userenv','sessionid');
推荐教程:《Oracle教程》
以上是Oracle学习指南之rowid详解的详细内容。更多信息请关注PHP中文网其他相关文章!

Oracle软件通过数据库管理、ERP、CRM和数据分析功能简化业务流程。1)OracleERPCloud自动化财务、人力资源等流程;2)OracleCXCloud管理客户互动,提供个性化服务;3)OracleAnalyticsCloud支持数据分析和决策。

Oracle的软件套件包括数据库管理、ERP、CRM等,帮助企业优化运营、提高效率、降低成本。1.OracleDatabase管理数据,2.OracleERPCloud处理财务、人力资源和供应链,3.使用OracleSCMCloud优化供应链管理,4.通过API和集成工具确保数据流动和一致性。

MySQL和Oracle的主要区别在于许可证、功能和优势。1.许可证:MySQL提供GPL许可证,免费使用,Oracle采用专有许可证,价格昂贵。2.功能:MySQL功能简单,适合Web应用和中小型企业,Oracle功能强大,适合大规模数据和复杂业务。3.优势:MySQL开源免费,适合初创公司,Oracle性能可靠,适合大型企业。

MySQL和Oracle在性能、成本和使用场景上有显着差异。 1)性能:Oracle在复杂查询和高并发环境下表现更好。 2)成本:MySQL开源,成本低,适合中小型项目;Oracle商业化,成本高,适用于大型企业。 3)使用场景:MySQL适用于Web应用和中小型企业,Oracle适合复杂的企业级应用。选择时需根据具体需求权衡。

Oracle软件可以通过多种方法提升性能。1)优化SQL查询,减少数据传输量;2)适当管理索引,平衡查询速度和维护成本;3)合理配置内存,优化SGA和PGA;4)减少I/O操作,使用合适的存储设备。

Oracle在企业软件和云计算领域如此重要是因为其全面的解决方案和强大的技术支持。1)Oracle提供从数据库管理到ERP的广泛产品线,2)其云计算服务如OracleCloudPlatform和Infrastructure帮助企业实现数字化转型,3)Oracle数据库的稳定性和性能以及云服务的无缝集成提升了企业效率。

MySQL和Oracle各有优劣,选择时需综合考虑:1.MySQL适合轻量级、易用需求,适用于Web应用和中小型企业;2.Oracle适合功能强大、可靠性高需求,适用于大型企业和复杂业务系统。

MySQL采用GPL和商业许可,适合小型和开源项目;Oracle采用商业许可,适合需要高性能的企业。MySQL的GPL许可免费,商业许可需付费;Oracle许可费用按处理器或用户计算,成本较高。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

WebStorm Mac版
好用的JavaScript开发工具

SublimeText3汉化版
中文版,非常好用

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具