來源表 SRC.TABLE_A (col1, col2, col3) → 目標表 TGT.TABLE_A (col1, col2, col3, col4, col5),目標多兩欄 col4, col5 需匯入為 NULL/預設值。
-- 1. 建立 DB Link (目標端執行)
CREATE DATABASE LINK src_link
CONNECT TO src_user IDENTIFIED BY pass
USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=src_host)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=src_svc)))';
-- 2. 插入指定欄位,新欄位自動為 NULL/DEFAULT
INSERT INTO tgt_table_a (col1, col2, col3)
SELECT col1, col2, col3 FROM src_table_a@src_link
WHERE create_dt > SYSDATE - 1;
-- 3. 批次提交大量資料
DECLARE
CURSOR c IS SELECT col1, col2, col3 FROM src_table_a@src_link WHERE ...;
TYPE arr_t IS TABLE OF c%ROWTYPE;
l_arr arr_t;
BEGIN
OPEN c;
LOOP
FETCH c BULK COLLECT INTO l_arr LIMIT 10000;
FORALL i IN 1..l_arr.COUNT
INSERT INTO tgt_table_a (col1, col2, col3) VALUES (l_arr(i).col1, l_arr(i).col2, l_arr(i).col3);
COMMIT;
EXIT WHEN c%NOTFOUND;
END LOOP;
CLOSE c;
END;
/
COMMIT;
優點:即時、可篩選、可轉換;缺點:跨網路、大量資料較慢。
-- SQL*Plus
SET COLSEP ',' PAGESIZE 0 FEEDBACK OFF TRIMSPOOL ON
SPOOL table_a.csv
SELECT col1 || ',' || col2 || ',' || col3 FROM src_table_a WHERE ...;
SPOOL OFF
LOAD DATA
INFILE 'table_a.csv'
APPEND
INTO TABLE tgt_table_a
FIELDS TERMINATED BY ','
(
col1,
col2,
col3,
col4 CONSTANT "NULL", -- 固定 NULL
col5 EXPRESSION "SYSDATE" -- 或 DEFAULT
)
優點:高效能、離線、可轉換;缺點:需中間檔案儲存空間。
expdp src_user/pass@SRC DIRECTORY=dp_dir
DUMPFILE=table_a.dmp TABLES=TABLE_A
QUERY=TABLE_A:"WHERE create_dt > SYSDATE-1"
LOGFILE=exp_table_a.log
-- 1. 建立暫存表對應來源結構
CREATE TABLE tmp_table_a AS SELECT * FROM src_table_a@src_link WHERE 1=0;
-- 2. 匯入至暫存表
impdp tgt_user/pass@TGT DIRECTORY=dp_dir
DUMPFILE=table_a.dmp TABLES=TABLE_A
REMAP_TABLE=TABLE_A:TMP_TABLE_A
TABLE_EXISTS_ACTION=REPLACE
-- 3. 轉換插入目標表
INSERT INTO tgt_table_a (col1, col2, col3, col4, col5)
SELECT col1, col2, col3, NULL, SYSDATE FROM tmp_table_a;
-- 4. 清理
DROP TABLE tmp_table_a;
impdp ... TRANSFORM=SEGMENT_ATTRIBUTES:N:TABLE
REMAP_TABLE=TABLE_A:TGT_TABLE_A
-- 但無法直接處理欄位數不符,需搭配上述暫存表
| 維度 | DB Link INSERT | SQL*Loader | Data Pump |
|---|---|---|---|
| 資料量 | < 100萬筆 | 任意 (GB-TB) | 任意 (GB-TB) |
| 即時性 | 高 | 低 (批次) | 低 (批次) |
| 轉換彈性 | 高 (PL/SQL) | 中 (控制檔運算式) | 中 (暫存表+SQL) |
| 網路依賴 | 是 | 否 (檔案傳輸) | 否 (檔案傳輸) |
| 平行度 | 手動分批 | PARALLEL 參數 | PARALLEL 參數 |
| 企業級特性 | 無 | 基本 | 完整 (壓縮/加密/重映射) |
DBMS_SCHEDULER 排程)DEFAULT,匯入時不指定欄位即自動套用