« 帝都华盛顿 晤对魏欧林先生 - 令人孺慕之长者 | Blog首页 | 备份重于一切 - 记(eygle.com)服务器硬盘故障 »
11gR2新特性之- 并行DBMS_PARALLEL_EXECUTE
作者:eygle | 【转载请注出处】|【云和恩墨 领先的zData数据库一体机 | zCloud PaaS云管平台 | SQM SQL审核平台 | ZDBM 数据库备份一体机】
链接:https://www.eygle.com/archives/2009/11/11gr2_dbms_parallel_execute.html
在2009 Oracle Openworld上,Thomas Kyte在一个关于《The top 10 - No, 11 - New Features of Oracle Database 11g Release 2》的演讲中,提到一个并行执行的新特性,比较感兴趣。链接:https://www.eygle.com/archives/2009/11/11gr2_dbms_parallel_execute.html
(这个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 |
这是一个好东西