匿名用户Oracle 有个分区表,随便查询一条数据,想知道这条数据位于哪个分区里面,有什么办法?
Oracle 有个分区表,随便查询一条数据,想知道这条数据位于哪个分区里面,有什么办法?
我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏
匿名用户Oracle 有个分区表,随便查询一条数据,想知道这条数据位于哪个分区里面,有什么办法?
表里的每条记录都有一个rowid信息,包含file_id和block_id信息, 用dbms_rowid.rowid_to_absolute_fno 可以得到file_id ; 用dbms_rowid.rowid_block_number(rowid) 得到block_id, 再去dba_extents里面匹配 file_id 和 block_id 范围, 示例如下:
select a.rowid as rid,
(select partition_name from dba_extents b
where dbms_rowid.rowid_to_absolute_fno(a.rowid,'分区表的所属用户名','你的分区表名')=b.file_id
and dbms_rowid.rowid_block_number(a.rowid) between b.block_id and b.block_id+b.blocks-1
) as partition_name, a.*
from 你的分区表名 a
where rownum=1;
评论
有用 1根据分区表名字,查出对应的分区列。
select owner, name,column_name from dba_part_key_columns where name='PART_TABLE_NAME';
在根据数据的对应的列的值,在dba_tab_partitions的high_value里做对照就可以了。
select table_name,COMPOSITE,PARTITION_NAME,SUBPARTITION_COUNT,HIGH_VALUE,TABLESPACE_NAME from dba_tab_partitions where table_name='PART_TABLE_NAME';
评论
有用 0
墨值悬赏