暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

11gR2新特性之- 并行DBMS_PARALLEL_EXECUTE

原创 eygle 2009-10-31
732
在2009 Oracle Openworld上,Thomas Kyte在一个关于《The top 10 - No, 11 - New Features of Oracle Database 11g Release 2》的演讲中,提到一个并行执行的新特性,比较感兴趣。
(这个PPT目前已经可以下载,下载地址为:Top 10,Tom的另外一个OOW PPT

这个新特性引入一个Package: DBMS_PARALLEL_EXECUTE,通过这个包可以将一个任务调度为并行,而此前我们需要手工来编写程序,通过rowid或者主键还分割,前一段做过大量这个工作,用11gR2,这个工作能简化很多。

这个包的典型用法引用如下:
DECLARE
l_sql_stmt VARCHAR2(1000);
l_try NUMBER;
l_status NUMBER;
BEGIN

-- Create the TASK
DBMS_PARALLEL_EXECUTE.CREATE_TASK ('mytask');

-- Chunk the table by ROWID
DBMS_PARALLEL_EXECUTE.CREATE_CHUNKS_BY_ROWID('mytask', 'HR', 'EMPLOYEES', true, 100);

-- Execute the DML in parallel
l_sql_stmt := 'update /*+ ROWID (dda) */ EMPLOYEES e
SET e.salary = e.salary + 10
WHERE rowid BETWEEN :start_id AND :end_id';
DBMS_PARALLEL_EXECUTE.RUN_TASK('mytask', l_sql_stmt, DBMS_SQL.NATIVE,
parallel_level => 10);

-- If there is an error, RESUME it for at most 2 times.
L_try := 0;
L_status := DBMS_PARALLEL_EXECUTE.TASK_STATUS('mytask');
WHILE(l_try < 2 and L_status != DBMS_PARALLEL_EXECUTE.FINISHED)
LOOP
L_try := l_try + 1;
DBMS_PARALLEL_EXECUTE.RESUME_TASK('mytask');
L_status := DBMS_PARALLEL_EXECUTE.TASK_STATUS('mytask');
END LOOP;

-- Done with processing; drop the task
DBMS_PARALLEL_EXECUTE.DROP_TASK('mytask');

END;
/
这是一个好东西,记录在此。

-The End-

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论