oracle dbms_parallel_execute,学习dbms_parallel_execute包

一、简介

ORACLE11g R2版本的新特性之一就是引进了DBMS_PARALLEL_EXECUTE包,使用DBMS_PARALLEL_EXECUTE包批量并行递增式的更新表。

更多ORACLE11g新特性请参考:http://www.cnblogs.com/oracle-dba/articles/3632223.html

基本原理:

(1)

把数据集分割成小的块(chunk),可基于rowid进行分块,也可根据指定范围的行数(rows)进行分块。

(2)

在每一个块上以并行的方式应用update语句,在每个块执行完成后,立即提交,原理是通过调用JOB进行并发操作。

好处在于:

(1)

在执行update操作时,仅仅锁住一个chunk而非锁住整个表;

(2) 因为对每个chunk

执行完毕就提交,所以当update操作失败后,之前变更的并不会回滚;

(3) 减小回滚空间(undo)的使用;

(4)

提高性能,可根据服务器的性能设置chunk_size与parallel_level的大小。

备注:parallel_level取决于CPU的个数,以及parallel_threads_per_cpu。

DBMS_PARALLEL_EXECUTE 使用三种将一个表的数据分割成多个chunk的方法:

(1)

CREATE_CHUNKS_BY_NUMBER_COL : 通过指定的字段来切割表

(2) CREATE_CHUNKS_BY_ROWID :

通过ROWID来切割表,本文只介绍通过BY ROWID

进行分割

(4) CREATE_CHUNKS_BY_SQL : 通过用户提供的sql语句来切割表

二、实践操作

DBMS_PARALLEL_EXECUTE这个包操作起来比较简单,大体步骤为:

(1)创建任务task,即调用create_task()过程;

(2)创建分块规则,即调用create_chunk_by_rowid()或者create_chunk_by_number_col()等过程;

(3)写动态update的sql语句,复杂和简单的均可,可以通过dbms_output.put_line()来验证动态sql的正确性;

(4)运行task任务,即调用run_task()过程;

(5)监控task任务,可通过视图user_parallel_execute_tasks和user_parallel_execute_chunks来监控task状态;

(6)task成功运行完毕后,将任务删除,即调用drop_task()过程。

2.1

准备工作

给用户授权

调用dbms_parallel_execute包时,需要有执行create

job的权限,因此需要给用于赋予create job权限。

grant create job to

username;

也可把grant execute on dbms_scheduler to

username;赋予某用户。

2.2 写代码

实践操作代码,有改动,仅做参考。

三、相关视图

(1)USER_PARALLEL_EXECUTE_CHUNKS

(2)USER_PARALLEL_EXECUTE_TASKS

原文:http://www.cnblogs.com/oracle-dba/p/3632361.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值