oracle多表并行,并行全表扫描oracle表-Oracle

本文介绍了如何通过优化Oracle全表扫描来提高数据导出(dump)的效率,重点关注磁盘顺序读取和并行处理。通过使用NTILE函数进行数据分段,并结合Oracle的ROWID信息,实现多线程并行扫描,以达到高效导出数据的目的。Java代码示例展示了如何利用ROWID进行分段操作。
摘要由CSDN通过智能技术生成

并行全表扫描oracle表

有时候,我们全量dump oracle中的数据,如何才能让dump高效的执行呢?这个问题的关注点在于1.磁盘顺序读.2.并行.前者要需要oracle本身提供数据能够基本顺序并且程序并行扫描一段数据能够一次性取一批,后者由dump程序保证。

提供下oracle rowid分段的sql,程序就是用多线程扫描每一段数据,这里就不提供了。

Java代码

select group_id,min(chartorowid(min_rowid)) min_rowid, max(chartorowid(max_rowid)) max_rowid    www.2cto.com

from (select T.min_rowid,

T.max_rowid,

T.Relative_Fno,

NTILE(分的段数) over(order by T.Relative_Fno,chartorowid(T.min_rowid)) group_id

from (select dbms_rowid.rowid_create(1,

B.data_object_id,

A.relative_fno,

A.block_id,

0) min_rowid,

dbms_rowid.rowid_create(1,

B.data_object_id,

A.relative_fno,

A.block_id + A.blocks – 1,

10000) max_rowid,A.Relative_Fno

from (select relative_fno, block_id, blocks

from sys.dba_extents    www.2cto.com

where segment_name = ‘表名’

and owner = ‘表的所有用户’

order by block_id) A,

(select data_object_id

from sys.DBA_objects

where owner = ‘表的所有用户’

and object_name = ‘表名’) B

where B.data_object_id IS NOT NULL) T)

group by group_id;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值