eygle.com   eygle.com
eygle.com eygle
eygle.com  
 

« 帝都华盛顿 晤对魏欧林先生 - 令人孺慕之长者 | Blog首页 | 备份重于一切 - 记(eygle.com)服务器硬盘故障 »

11gR2新特性之- 并行DBMS_PARALLEL_EXECUTE

在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-


历史上的今天...
    >> 2015-11-03文章:
    >> 2011-11-03文章:
    >> 2008-11-03文章:
    >> 2007-11-03文章:
    >> 2006-11-03文章:
    >> 2004-11-03文章:
           两只蝴蝶

无觅

By eygle on 2009-11-03 08:11 | Comments (1) | OraNews | Oracle12c/11g | 2436 |

1 Comment

这是一个好东西


CopyRight © 2004~2020 云和恩墨,成就未来!, All rights reserved.
数据恢复·紧急救援·性能优化 云和恩墨 24x7 热线电话:400-600-8755 业务咨询:010-59007017-7040 or 7037 业务合作: marketing@enmotech.com