Oracle 11G R2的dbms_parallel_execute
並行DML是讓批量DML加速的一種非常強大的方法。然而,在單個事務中應用所有的變更也是有缺點的。這會導致長時間的鎖,要求大量的回滾段,而且當操作失敗時,將帶來昂貴的回滾操作的風險。
在Oracle 11gR2中引入的DBMS_PARALLEL_EXECUTE幫助解決了這個難題。它允許用更小的”塊“來執行並行DML,且每個塊都可以獨立提交。任何一個單獨的塊操作發生失敗時,包支援重新啟動這個任務。
DECLARE
v_stmt VARCHAR2(2000);
v_taskname VARCHAR2(200) := 'my parallel task demo3';
v_status NUMBER;
BEGIN
dbms_parallel_execute.create_task(task_name => v_taskname,
COMMENT => 'demo');
dbms_parallel_execute.create_chunks_by_rowid(task_name => v_taskname,
table_owner => USER,
table_name => 'TEST_SALES',
by_row => TRUE,
chunk_size => 100);
v_stmt := 'update TEST_SALES set amount_sold = amount_sold*10 where rowid between :start_id and :end_id ';
--這裡的繫結變數佔位符:start_id與end_id都不能隨意替換成其他標識
dbms_parallel_execute.run_task(task_name => v_taskname,
sql_stmt => v_stmt,
language_flag => dbms_sql.native,
parallel_level => 4);
v_status := dbms_parallel_execute.task_status(task_name => v_taskname);
IF v_status = dbms_parallel_execute.finished THEN
dbms_parallel_execute.drop_task(task_name => v_taskname);
ELSE
dbms_parallel_execute.drop_task(task_name => v_taskname);
raise_application_error(-20001,
v_taskname || ' finished with error!!!',
TRUE);
END IF;
END;
摘自:Oracle效能優化求生指南
在Oracle 11gR2中引入的DBMS_PARALLEL_EXECUTE幫助解決了這個難題。它允許用更小的”塊“來執行並行DML,且每個塊都可以獨立提交。任何一個單獨的塊操作發生失敗時,包支援重新啟動這個任務。
DECLARE
v_stmt VARCHAR2(2000);
v_taskname VARCHAR2(200) := 'my parallel task demo3';
v_status NUMBER;
BEGIN
dbms_parallel_execute.create_task(task_name => v_taskname,
COMMENT => 'demo');
dbms_parallel_execute.create_chunks_by_rowid(task_name => v_taskname,
table_owner => USER,
table_name => 'TEST_SALES',
by_row => TRUE,
chunk_size => 100);
v_stmt := 'update TEST_SALES set amount_sold = amount_sold*10 where rowid between :start_id and :end_id ';
--這裡的繫結變數佔位符:start_id與end_id都不能隨意替換成其他標識
dbms_parallel_execute.run_task(task_name => v_taskname,
sql_stmt => v_stmt,
language_flag => dbms_sql.native,
parallel_level => 4);
v_status := dbms_parallel_execute.task_status(task_name => v_taskname);
IF v_status = dbms_parallel_execute.finished THEN
dbms_parallel_execute.drop_task(task_name => v_taskname);
ELSE
dbms_parallel_execute.drop_task(task_name => v_taskname);
raise_application_error(-20001,
v_taskname || ' finished with error!!!',
TRUE);
END IF;
END;
摘自:Oracle效能優化求生指南
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8520577/viewspace-1654881/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 11G R2中的並行執行,dbms_parallel_execute並行Parallel
- 11g DBMS_PARALLEL_EXECUTEParallel
- Oracle 11g r2 racOracle
- oracle 11g r2 installOracle
- Oracle 11g R2刪除EMOracle
- oracle 11g R2安裝RACOracle
- oracle 11G r2 異機恢復Oracle
- Oracle 11g R2手動配置EMOracle
- Oracle 11g R2 備份與恢復Oracle
- ORACLE 11G R2 11.2.0.1.0 不使用SCAN IP的理由Oracle
- 【Oracle】11g RAC R2 日常巡檢--GridOracle
- ORACLE 11G R2 修改"使用者名稱"Oracle
- RHEL 6.2 64位安裝ORACLE 11G R2Oracle
- ubuntu10.04 安裝oracle 11g r2UbuntuOracle
- 非OMF管理下ORACLE 11G R2 Data Guard配置Oracle
- Oracle 11g R2(11.2.0.3.0) RAC環境搭建(二)Oracle
- rhel 5.4 64位上安裝oracle 11g R2Oracle
- ORACLE 11G R2 for linux 版本已經發布OracleLinux
- Oracle 11g R2 RAC安裝前的系統環境搭建Oracle
- Oracle 11g R2的解除安裝與重灌過程詳解Oracle
- 使用11g dbms_parallel_execute執行並行更新(下)Parallel並行
- 使用11g dbms_parallel_execute執行並行更新(上)Parallel並行
- 11G R2 ASM管理ASM
- oracle之 11g RAC R2 體系結構---GridOracle
- 11g R2新特徵:oracle cluster health moniter (CHM) 簡介特徵Oracle
- 水煮oracle 20——redhat6下的oracle 11g r2的靜默安裝與配置OracleRedhat
- 【oracle】使用DBMS_PARALLEL_EXECUTE並行更新表OracleParallel並行
- 基於IBM AIX系統安裝oracle 11g R2IBMAIOracle
- Oracle 11g R2 RAC高可用連線特性 – SCAN詳解Oracle
- MSCS下Oracle 11g R2群集配置完整版Oracle
- Oracle 11g r2基於OMF方式手工建立資料庫Oracle資料庫
- solaris 10 安裝 oracle 11g R2核心引數設定Oracle
- 11g R2 RAC: SERVER POOLSServer
- 確保Oracle 11g R2資料庫高可用性WQOracle資料庫
- Oracle 11g R2 RAC高可用連線特性 – SCAN詳解(轉)Oracle
- Oracle 11G R2 RAC 關閉叢集自啟資料庫Oracle資料庫
- Oracle 11g R2之物理Dataguard 重新命名資料檔案Oracle
- ORACLE 11g R2 RAC 11.2.0.2.12 PSU 安裝升級Oracle