2011-01-05 41 views
4

若干年前,托馬斯·凱特說,這(here):如何使用Oracle外部表平行直接路徑加載?

我最喜歡使用外部表:

加載這個真正的大文件儘快。在過去,將腳本設置爲並行直接路徑加載。協調所述腳本的解除。檢查日誌文件以確保它們全部完成。分割輸入文件或使用跳過並加載來分割文件。總之,屁股疼痛。

目前:

create table ET parallel; 
create table new_table (...) parallel 
as 
select * from ET; 

並行直接路徑加載製成微不足道的。

除了這是無效的語法...

我如何使用Oracle的外部表進行「並行直接路徑負載」?

回答

4

外部表的並行功能有所限制。據我所知,你需要有幾個可以並行處理的格式相同的文件(見下文)或一個固定長度格式的文件:

CREATE TABLE WORKING_HOURS_EXT 
(employee_id  NUMBER(8), 
    project_id  VARCHAR2(20), 
    start_time  VARCHAR2(25), 
    end_time   VARCHAR2(25) 
) 
ORGANIZATION EXTERNAL 
( 
    TYPE ORACLE_LOADER 
    DEFAULT DIRECTORY loader_data_dir 
    ACCESS PARAMETERS 
    ( 
    records delimited by newline 
    fields terminated by ';' 
    (employee_id, project_id, start_time, end_time 
    ) 
) 
    LOCATION ('hours01.txt', 'hours02.txt', 'hours03.txt') 
) 
PARALLEL; 

ALTER SESSION ENABLE PARALLEL DML; 

MERGE INTO WORKING_HOURS a 
USING WORKING_HOURS_EXT b ON (... 
+0

Codo的例子非常好, 謝謝 。僅需添加一些要點1.即使從單個文件並行讀取也是可行的,並不需要多個文件並行工作。 2.對並行進程的限制類似於VAR格式,文件位於磁帶驅動器等。3.一旦並行被定義爲表的一部分,所有查詢將嘗試並行運行。我嘗試了一個帶有800萬條記錄和15列的示例文件,當我使用單個文件和並行選項時,與使用5個文件(從800萬條記錄文件拆分)相比,執行速度更快。 – 2012-10-02 10:40:11

相關問題