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
- Oracle 11g R2 備份與恢復Oracle
- 確保Oracle 11g R2資料庫高可用性WQOracle資料庫
- Oracle之11g DataGuardOracle
- Oracle 11G 安裝文件Oracle
- benchmark 壓測Oracle 11gOracle
- sysbench壓測Oracle 11gOracle
- Oracle 11G 安裝 bbed 工具Oracle
- oracle 11g data guard維護Oracle
- oracle 11g OEM在哪裡找到???Oracle
- oracle 11g 常用命令Oracle
- Oracle 11g RAC Silent Install For NFSOracleNFS
- Oracle 11g刪除庫重建Oracle
- Oracle 11G 修改scan_ipOracle
- Oracle 11g RAC SCAN ip的原理及配置Oracle
- Oracle 11G RAC叢集安裝(3)——安裝OracleOracle
- Oracle Linux 6.7 靜預設安裝Oracle 11gOracleLinux
- Oracle 11g RAC 監聽日常管理Oracle
- Oracle 11g 052題庫解析1Oracle
- oracle 11g datagurd主從切換Oracle
- ORACLE10G升級11GOracle
- Oracle 11g RAC手動新增serviceOracle
- Oracle 11g dg broker自動failoverOracleAI
- Automatic Diagnostic Repository (ADR) with Oracle Net for 11gOracle
- Oracle 11g關閉開啟AWROracle
- oracle 11g 系統審計功能Oracle
- Oracle:Redhat 7 + Oracle RAC 11g 安裝 bug 總結OracleRedhat
- 新特性:/dev/shm對Oracle 11g的影響devOracle
- oracle 11G RAC的建立(VM虛擬環境)Oracle
- ORACLE 11g的密碼錯誤延時驗證Oracle密碼
- oracle 11g 單例項資料庫的安裝Oracle單例資料庫
- Oracle 11g 測試停庫對job的影響Oracle
- Oracle 11g 重新建立控制檔案Oracle
- Oracle Data Pump 11G 資料泵元件Oracle元件
- Oracle 11g dataguard 配置簡約步驟Oracle
- oracle 11g自動記憶體管理Oracle記憶體
- Oracle 11g RAC重新新增節點Oracle
- Oracle 11g升級到12COracle
- Oracle GoldenGate 11g官方文件Administrator’s GuideOracleGoGUIIDE