Oracle 11g 中新功能 DBMS_PARALLEL_EXECUTE 包可以使你在並行增量更新一個大表的數據,兩個高層次的步驟是:
- Group sets of rows in the table into smaller chunks.
- Apply the desired UPDATE statement to the chunks in parallel, committing each time you have finished processing a chunk.
This technique is recommended whenever you are updating a lot of data. Its advantages are:
- You lock only one set of rows at a time, for a relatively short time, instead of locking the entire table.
- You do not lose work that has been done if something fails before the entire operation finishes.
- You reduce rollback space consumption.
- You improve performance.
Different Ways to Spilt Workload
- CREATE_CHUNKS_BY_NUMBER_COL : Chunks the table associated with the given task by the specified column.
- CREATE_CHUNKS_BY_ROWID : Chunks the table associated with the given task by ROWID
- CREATE_CHUNKS_BY_SQL : Chunks the table associated with the given task by means of a user-provided SELECT statement
準備測試數據
注:
執行DBMS_PARALLE_EXECUTE的用戶需要create job權限,DBMS_SQL的執行權限,因爲CHUNK_BY_SQL, RUN_TASK, and RESUME_TASK 子程序需要使用DBMS_SQL執行查詢。
1.使用 CREATE_CHUNKS_BY_ROWID
使用CREATE_CHUNKS_BY_NUMBER_COL
使用CREATE_CHUNKS_BY_SQL