使用 rowID查询数据位于分区表哪个分区中
来源:互联网 发布:黑客网络hacknet安卓版 编辑:程序博客网 时间:2024/04/30 15:49
--使用rowID获取table的object_IDselect rowID, dbms_rowid.rowid_object(rowid) object_id, dbms_rowid.rowid_relative_fno(rowid) file_num, dbms_rowid.rowid_block_number(rowid) block_number, dbms_rowid.rowid_row_number(rowid) row_number, dbms_rowid.rowid_to_absolute_fno(rowid,'SYS','TEST') file#from tablewhere table.conditon = 'Your condition'
--根据objectID得知该数据位于哪个分区select a.object_name, a.object_type, a.subobject_name, a.object_id, a.data_object_id from dba_objects a where object_name = UPPER('TABLE_NAME') and object_id = 3019792以上为原创.
--rowID的含义:
参考自:http://blog.csdn.net/haiross/article/details/15338061
为了方便,我直接放这里了:
ROWID是数据的详细地址,通过rowid,oracle可以快速的定位某行具体的数据的位置。
ROWID可以分为物理rowid和逻辑rowid两种。普通的堆表中的rowid是物理rowid,索引组织表(IOT)的rowid是逻辑rowid。oracle提供了一种urowid的数据类型,同时支持物理和逻辑rowid。本文主要关注物理rowid
物理rowid又分为扩展rowid(extended rowid)和限制rowid(restricted rowid)两种格式。限制rowid主要是oracle7以前的rowid格式,现在已经不再使用,保留该类型只是为了兼容性。所以本文的提到物理rowid一般是指扩展rowid格式。
本文主要内容:
1.Rowid的显示形式
2.如何从rowid计算得到obj#,rfile#,block#,row#
3.如何从obj#,rfile#,block#,row#计算得到rowid
4.Rowid的内部存储格式
5.Index中存储的rowid
1.Rowid的显示形式
我们从rowid伪列里select出来的rowid是基于base64编码,一共有18位,分为4部分:
OOOOOOFFFBBBBBBRRR
其中:
OOOOOO: 六位表示data object id,根据object id可以确定segment。关于data object id和object id的区别,请参考http://www.orawh.com/index.php/archives/62
FFF: 三位表示相对文件号。根据该相对文件号可以得到绝对文件号,从而确定datafile。关于相对文件号和绝对文件号,请参考http://blog.itpub.net/post/330/22749
BBBBBB:六位表示data block number。这里的data block number是相对于datafile的编号,而不是相对于tablespace的编号。
RRR:三位表示row number。
Oracle提供了dbm_rowid来进行rowid的一些转换计算。
SQL> create table test(id int,name varchar2(30));
Table created.
SQL> insert into test values(1,'a');
1 row created.
SQL> commit;
Commit complete.
SQL> select rowid from test;
ROWID
------------------
AAAGbEAAHAAAAB8AAA
SQL> select dbms_rowid.rowid_object(rowid) obj#,
2 dbms_rowid.rowid_relative_fno(rowid) rfile#,
3 dbms_rowid.rowid_block_number(rowid) block#,
4 dbms_rowid.rowid_row_number(rowid) row#,
5 dbms_rowid.rowid_to_absolute_fno(rowid,'SYS','TEST') file#
6 from test;
--Oracle object_id和data_object_id的区别
Oracle的数据字典表dba_objects包含了两个字段,object_id, data_object_id,官方文档上的解释是:
object_id: Dictionary object number of the object.Data_object_id: Dictionary object number of the segment that contains the object.
object_id : 数据的编号,类似于row_number
Data_object_id:存储数据的物理地址,类似于指针
- 使用 rowID查询数据位于分区表哪个分区中
- 创建分区表+分区+分区表的分类+创建范围分区表+查询分区里面的数据
- oralce,创建分区,子分区表,分区索引,查询分区对应的数据sql
- 查询分区表中各个分区的记录条数
- 使用用rowid 在线重定义分区表
- 指定分区表分区进行查询
- 指定分区表分区进行查询
- ORACLE分区表删除分区数据
- 在sqlserver2000中使用分区表和分区视图
- 怎么在ArcSDE中使用Oracle分区表2-索引分区
- 创建一个分区表,并插入一些数据,同时查询出每个分区的数据
- ORACLE分区表的查询(使用分区键查询自动默认)
- 分区策略查询+分区表字典信息
- 分区表(三)--查询分区边界
- 数据字典查询数据库中分区字段
- Hive学习笔记 --- Hive中创建分区表,并且查询数据
- Java中获取类位于哪个Jar包或者位于哪个目录
- mysql多列分区表,查询只使用第二个字段是否能自动分区裁剪测试
- mysql安装方法一
- MySQL EXPLAIN命令
- GitHub新项目Deepo:一键安装11项深度学习框架与环境
- oracle数据库表中某几个字段的重复数据去重
- matplotlib数据展现的基本用法
- 使用 rowID查询数据位于分区表哪个分区中
- mongodb笔记02(查询文档)
- FreeMarker自学教程
- Java并发编程:Synchronized及其实现原理
- 阿里云CDN图片鉴黄服务正式上线,人工智能助力企业降低违规风险
- JS的方法分类整理
- va_buffersharing example
- 神经网络激励函数的作用是什么?有没有形象的解释?
- linux下部署maven的web项目