Oracle 邏輯備份工具經歷 exp/imp (傳統) 到 expdp/impdp (Data Pump, 10g+) 兩代。本文系統對比兩代工具,詳解表/用戶/完全三種模式、增量備份條件、關鍵參數、磁帶/磁碟輸出、遷移實戰流程,助你選擇正確工具與參數完成備份遷移任務。
| 維度 | EXP/IMP (Client-side) | EXPDP/IMPDP (Server-side) |
|---|---|---|
| 執行位置 | 客戶端進程讀寫資料 | 資料庫伺服器進程 (DMnn) 直接讀寫 |
| 效能 | 受網路/客戶端 CPU 限制 | 可平行、直接路徑、壓縮、極高吞吐 |
| 檔案位置 | 客戶端/網路路徑 | 伺服器端目錄物件 (DIRECTORY) |
| 支援特性 | 基本物件 | 壓縮、加密、並行、網路連結、可攜式表空間、細粒度過濾 |
| 版本支援 | 所有版本 (維護模式) | 10g+ 正式功能 |
結論:10g+ 環境強制優先使用 Data Pump;僅在跨版本遷移至 9i 以下或極簡單小表時用 exp/imp。
| 模式 | 範圍 | EXP 參數 | EXPDP 參數 | 適用場景 |
|---|---|---|---|---|
| 表模式 | 指定表 | TABLES=scott.emp,scott.dept | TABLES=emp,dept | 單表/少數表備份、跨 Schema 遷移特定表 |
| 用戶/Schema 模式 | 某用戶所有物件 | OWNER=scott | SCHEMAS=scott | 應用 Schema 完整備份、Schema 級遷移 |
| 完全模式 | 整個資料庫 | FULL=Y | FULL=Y (需 DATAPUMP_EXP_FULL_DATABASE 角色) | 異機遷移、DR 演練、升級前完整備份 |
| 參數 | 說明 | 推薦值/範例 |
|---|---|---|
| DIRECTORY | 伺服器端目錄物件 (必須) | CREATE DIRECTORY dp_dir AS '/u01/dpump'; GRANT READ,WRITE ON DIRECTORY dp_dir TO scott; |
| DUMPFILE | 轉儲檔名,支援 %U 多檔 | scott_%U.dmp |
| LOGFILE | 日誌檔 | scott.log |
| PARALLEL | 平行度 (需 Enterprise Edition) | 4 ~ CPU核心數 |
| COMPRESSION | 壓縮等級 | ALL (資料+中繼) / METADATA_ONLY / NONE |
| ENCRYPTION | 加密模式 | ALL / DATA_ONLY / ENCRYPTED_COLUMNS_ONLY / NONE |
| FLASHBACK_TIME | 時間點一致性 (SCN/時間戳) | SYSTIMESTAMP / TO_TIMESTAMP('2024-01-01','YYYY-MM-DD') |
| CONTENT | 導出內容 | ALL / DATA_ONLY / METADATA_ONLY |
| INCLUDE/EXCLUDE | 細粒度物件過濾 | INCLUDE=TABLE:\"LIKE 'EMP%'\",INDEX |
| REUSE_DUMPFILES | 覆寫既有檔案 | Y |
| NETWORK_LINK | 跨資料庫直接導入 (無轉儲檔) | dblink_name |
Data Pump 不支援增量備份**;若需增量,改用 RMAN 區塊變更追蹤。
-- 第一次完全備份
exp system/manager FULL=Y FILE=full_0.dmp RECORD=Y INCTYPE=COMPLETE
-- 後續累積增量
exp system/manager FULL=Y FILE=inc_1.dmp RECORD=Y INCTYPE=CUMULATIVE
-- 後續差異增量
exp system/manager FULL=Y FILE=inc_2.dmp RECORD=Y INCTYPE=INCREMENTAL
RECORD=Y 在 SYS.INCEXP 記錄導出時間,供下次增量參考。FULL=Y;第一次必須 INCTYPE=COMPLETE。expdp scott/tiger@src_db \
SCHEMAS=scott \
DIRECTORY=dp_dir \
DUMPFILE=scott_%U.dmp \
LOGFILE=scott_exp.log \
PARALLEL=8 \
COMPRESSION=ALL \
FLASHBACK_TIME=SYSTIMESTAMP \
EXCLUDE=STATISTICS \
REUSE_DUMPFILES=Y
-- 建立目錄物件
CREATE DIRECTORY dp_dir AS '/u01/dpump';
GRANT READ,WRITE ON DIRECTORY dp_dir TO scott;
-- 建立使用者/表空間/配額 (若不存在)
CREATE USER scott IDENTIFIED BY tiger DEFAULT TABLESPACE users QUOTA UNLIMITED ON users;
GRANT CONNECT, RESOURCE, DATAPUMP_IMP_FULL_DATABASE TO scott;
impdp scott/tiger@tgt_db \
SCHEMAS=scott \
DIRECTORY=dp_dir \
DUMPFILE=scott_%U.dmp \
LOGFILE=scott_imp.log \
PARALLEL=8 \
TABLE_EXISTS_ACTION=SKIP \
TRANSFORM=SEGMENT_ATTRIBUTES:N:TABLE \
EXCLUDE=STATISTICS
-- 物件計數比對
SELECT owner, object_type, COUNT(*) FROM dba_objects WHERE owner='SCOTT' GROUP BY owner, object_type;
-- 列數比對 (抽樣)
SELECT table_name, num_rows FROM dba_tables WHERE owner='SCOTT';
-- 重新收集統計資訊
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCOTT');
| 場景 | 注意事項 |
|---|---|
| Big Endian → Little Endian | Data Pump 自動轉換;可攜式表空間需 RMAN CONVERT。 |
| 字元集不同 | 來源/目標字元集需相容;否則資料截斷/亂碼。建議目標用 AL32UTF8。 |
| 12c → 19c 升級 | Data Pump 導入後必跑 @?/rdbms/admin/utlrp.sql 重編譯無效物件。 |
| PDB 遷移 (12c+) | 用 FULL=Y + TRANSPORTABLE=ALWAYS 或 DBMS_PDB 拔插。 |
Data Pump 是 Oracle 10g 以來邏輯備份遷移的標準工具。掌握 PARALLEL、COMPRESSION、FLASHBACK_TIME、NETWORK_LINK 等核心參數,配合目錄物件權限管理,即可構建高效、安全、可自動化的備份遷移體系。