外部表載入資料(ExternalTables)

leon830216發表於2014-03-01
支援資料庫版本:10gR2

1 選用 sqlldr 而不是外部表的情況

1-1 必須透過網路載入資料, 輸入檔案不在資料庫伺服器上
1-2 多使用者使用相同的外部表處理不同的輸入檔案
1-3 LOB 型別


2 建立外部表 (利用 sqlldr 控制檔案建立)
sqlldr go/go ldr.ctl external_table=generate_only
如果使用 direct=true 則會覆蓋 external_table=generate_only 選項

3 建立Directory物件
create directory extdir as '/tmp/script';
grant read,write on directory extdir to go;

4 建立外部表

4-1 oracle_loader 方式
每次訪問外部表產生的log, bad, dsc檔案也可以透過外部表形式讀取
create table ext_tbl (col1 varchar2(10),col2 number)
organization external 
(
    type oracle_loader default directory extdir
    access parameters
    (
        records delimited by newline
        fields terminated by ","
        (col1,col2)
    )
    location('test.dat')
);

4-2 oracle_datapump 方式

可以載入, 解除安裝(匯出)資料
只會產生log檔案, 沒有bad, dsc檔案

- 修改外部表
-- 表結構
於普通表相同,修改後access parameters中也要作相應修改
-- 訪問驅動
alter table ext_tbl default directory dir_name;
-- 載入引數
要修改的部分所有引數必須重新定義
alter table ext_tbl access parameters (records delimited by newline fields terminated by ":" (col1,col2));
-- 載入路徑
alter table ext_tbl location ('filename');

- 載入多個檔案
各個檔案格式必須能被access parameters定義所識別
alter table ext_tbl location ('filename1','filename2');

- 載入效率最佳化
parallel,nologfile,nodiscardfile,nobadfile
sqlldr中的最佳化引數也同樣有效(訪問驅動為oracle_loader時)
insert /*+ append */ into tbl select * from ext_tbl; ---歸檔並且forcelogging時append失效

- 載入驅動
-- oracle_loader
--- 格式化記錄
記錄分隔方式
records fixed 20  --- 定長,20位產生一條記錄
records variable 4 --- 行記錄前4位代表此行長度
records delimited by newline --- 換行符為一條記錄終結
records delimited by '|' --- | 為一條記錄終結
載入條件
load when (col1 != 1)   --- col1 != 1 的記錄載入
輸出檔案
logfile 'filename'/nologfile
badfile 'filename'/nobadfile
discardfile 'filename'/nodiscardfile
緩衝區
readsize   --- 預設1M
date_cache --- 預設1000條
跳過記錄數
skip 10
--- 處理資料行
fields terminated by ','  --- 列分隔
missing field values are null --- 某列沒有值則以NULL載入
reject rows with all null fields --- 所有列都沒值則跳過該記錄,不指定則各列均以NULL載入
--- 列定義
col1 (1:5) char(5) --- 列名,長度(僅定長),型別,預設值
-- oracle_datapump ???

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22558114/viewspace-1097763/,如需轉載,請註明出處,否則將追究法律責任。

相關文章