前言
Oracle 10g 引入 Data Pump 技術,以服務端並行處理、流式傳輸、細粒度過濾等特性全面超越傳統 exp/imp。本文深度對比兩代工具,詳解 expdp/impdp 27 大核心參數,提供生產級實戰範例。
一、傳統 exp/imp vs Data Pump 核心差異
| 維度 | exp/imp | expdp/impdp |
| 運行位置 | 客戶端/服務端均可 | 僅服務端(需目錄對象) |
| 文件存放 | 客戶端本地路徑 | 服務端目錄對象映射的 OS 路徑 |
| 並行度 | 單線程 | PARALLEL 多線程並行 |
| 網絡模式 | 不支持 | NETWORK_LINK 跨庫直接導入 |
| 過濾靈活性 | QUERY 參數 | INCLUDE/EXCLUDE/SAMPLE/QUERY 多維度 |
| 壓縮/加密 | 不支持 | COMPRESSION/ENCRYPTION 內建 |
| 版本兼容 | 僅同版本 | VERSION 參數支持跨版本導出 |
| 文件兼容性 | .dmp 專有格式 | .dmp 專有格式,**不互通** |
二、Data Pump 架構關鍵點
- 主進程:控制流程、分配工作、寫入元數據
- 工作進程:實際數據讀寫、轉換、壓縮(數量由 PARALLEL 決定)
- 目錄對象:邏輯名稱映射 OS 目錄,**必須預先創建並授權**
- 作業表:`SYS.DATAPUMP_JOB_*` 記錄作業狀態,支持斷點續傳
三、目錄對象準備(前置條件)
-- 1. 創建目錄對象(需 CREATE ANY DIRECTORY 權限)
CREATE OR REPLACE DIRECTORY dpump_dir AS '/u01/dpump';
-- 2. 授予讀寫權限
GRANT READ, WRITE ON DIRECTORY dpump_dir TO scott;
-- 3. 驗證
SELECT * FROM DBA_DIRECTORIES WHERE DIRECTORY_NAME = 'DPUMP_DIR';
四、EXPDP 核心參數詳解(27 參數分類)
1. 連接與作業控制
| 參數 | 說明 | 示例 |
| ATTACH | 掛接現有作業 | ATTACH=scott.job_123 |
| JOB_NAME | 自定義作業名 | JOB_NAME=exp_full_20240115 |
| PARALLEL | 並行工作進程數 | PARALLEL=4 |
| STATUS | 顯示進度間隔(秒) | STATUS=30 |
2. 導出範圍與模式
| 參數 | 模式 | 說明 |
| FULL=Y | 全庫 | 需 DATAPUMP_EXP_FULL_DATABASE 角色 |
| SCHEMAS | Schema 級 | SCHEMAS=hr,oe,pm |
| TABLES | 表級 | TABLES=hr.employees,oe.orders:partition_q1 |
| TABLESPACES | 表空間級 | TABLESPACES=users,example |
| TRANSPORT_TABLESPACES | 可傳輸表空間 | TRANSPORT_TABLESPACES=tbs_data |
3. 內容過濾
| 參數 | 選項 | 效果 |
| CONTENT | ALL/DATA_ONLY/METADATA_ONLY | 控制導出數據還是定義 |
| INCLUDE | 對象類型[:名稱條款] | 僅導出指定類型 |
| EXCLUDE | 對象類型[:名稱條款] | 排除指定類型 |
| QUERY | WHERE 子句 | 數據行級過濾 |
| SAMPLE | 百分比 | 採樣導出(如 SAMPLE=10) |
4. 文件與存儲控制
| 參數 | 說明 | 示例 |
| DIRECTORY | 目錄對象(必填) | DIRECTORY=dpump_dir |
| DUMPFILE | 導出文件名,支持多文件、%U 通配 | DUMPFILE=exp_%U.dmp |
| FILESIZE | 單文件最大尺寸 | FILESIZE=2G |
| COMPRESSION | 壓縮算法 | COMPRESSION=ALL (METADATA_ONLY/NONE) |
| ENCRYPTION | 加密模式 | ENCRYPTION=ALL (DATA_ONLY/ENCRYPTED_COLUMNS_ONLY/NONE) |
| ENCRYPTION_PASSWORD | 加密密碼 | ENCRYPTION_PASSWORD=StrongPwd#123 |
5. 閃回與一致性
| 參數 | 說明 | 互斥 |
| FLASHBACK_SCN | 指定 SCN 閃回 | FLASHBACK_TIME |
| FLASHBACK_TIME | 指定時間閃回 | FLASHBACK_SCN |
| CONSISTENT=Y | 確保一致性視圖(舊參數,10g+ 默認一致) | - |
6. 性能與調試
| 參數 | 說明 |
| ESTIMATE | BLOCKS/STATISTICS 預估大小方法 |
| ESTIMATE_ONLY | Y 僅預估不導出 |
| LOGFILE | 日誌文件名 |
| NOLOGFILE | Y 禁用日誌 |
| METRICS | Y 記錄詳細性能指標 |
7. 版本與傳輸
| 參數 | 說明 |
| VERSION | COMPATIBLE/LATEST/具體版本號(如 11.2.0.4) |
| TRANSPORT_FULL_CHECK | Y/N 可傳輸表空間依賴檢查模式 |
五、IMPDP 核心參數(重點差異)
| 參數 | 說明 | 典型值 |
| REMAP_SCHEMA | Schema 重映射 | REMAP_SCHEMA=hr:hr_dev |
| REMAP_TABLESPACE | 表空間重映射 | REMAP_TABLESPACE=users:users_dev |
| REMAP_TABLE | 表名重映射 | REMAP_TABLE=hr.emp:emp_test |
| TABLE_EXISTS_ACTION | 表存在時動作 | SKIP/APPEND/TRUNCATE/REPLACE |
| CONTENT | 導入內容範圍 | ALL/DATA_ONLY/METADATA_ONLY |
| TRANSFORM | 元數據轉換 | SEGMENT_ATTRIBUTES:N,STORAGE:N |
| PARTITION_OPTIONS | 分區處理 | NONE/DEPARTITION/MERGE |
六、生產級實戰範例
1. 全庫導出(生產備份標準)
nohup expdp system/manager@PROD \
DIRECTORY=dpump_dir \
DUMPFILE=full_%U.dmp \
LOGFILE=full_exp.log \
FULL=Y \
PARALLEL=8 \
COMPRESSION=ALL \
ENCRYPTION=ALL \
ENCRYPTION_PASSWORD=Backup#2024 \
STATUS=60 \
JOB_NAME=full_exp_20240115 \
> /dev/null 2>&1 &
2. Schema 級導出(應用遷移)
expdp scott/tiger@PROD \
DIRECTORY=dpump_dir \
DUMPFILE=scott_schema.dmp \
LOGFILE=scott_exp.log \
SCHEMAS=scott \
PARALLEL=4 \
COMPRESSION=METADATA_ONLY
3. 表級導出帶過濾(歷史數據歸檔)
expdp scott/tiger@PROD \
DIRECTORY=dpump_dir \
DUMPFILE=orders_2023.dmp \
LOGFILE=orders_exp.log \
TABLES=oe.orders \
QUERY='oe.orders:"WHERE order_date < DATE ''2024-01-01''"' \
PARALLEL=2
4. 跨庫直接導入(無中間文件)
-- 目標庫創建 DB LINK
CREATE DATABASE LINK prod_link CONNECT TO scott IDENTIFIED BY tiger USING 'PROD';
-- 目標庫直接導入
impdp scott/tiger@DEV \
DIRECTORY=dpump_dir \
NETWORK_LINK=prod_link \
SCHEMAS=scott \
REMAP_TABLESPACE=users:users_dev \
TABLE_EXISTS_ACTION=REPLACE \
PARALLEL=4
5. 僅導入元數據(結構同步)
impdp system/manager@TEST \
DIRECTORY=dpump_dir \
DUMPFILE=full.dmp \
CONTENT=METADATA_ONLY \
TRANSFORM=SEGMENT_ATTRIBUTES:N:TABLE \
TRANSFORM=STORAGE:N:TABLE
七、常見問題與最佳實踐
1. ORA-39002/ORA-39070:目錄對象權限不足
確保用戶有目錄對象的 READ/WRITE 權限,且 OS 路徑 Oracle 進程可讀寫
2. 並行度設置建議
- CPU 核心數 ≤ 8:PARALLEL = CPU 核心數
- CPU 核心數 > 8:PARALLEL = CPU 核心數 × 0.75
- 存儲為 SSD/Flash 可適當增加
3. 大表導出優化
- 使用 `FILESIZE=4G` 分割文件便於傳輸
- 啟用 `COMPRESSION=ALL` 減少 I/O
- 分區表指定 `TABLES=schema.table:partition_name` 並行導出分區
4. 作業監控與管理
-- 查看運行中作業
SELECT * FROM DBA_DATAPUMP_JOBS;
-- 查看作業進度
SELECT * FROM DBA_DATAPUMP_SESSIONS;
-- 重新掛接作業
expdp system/manager ATTACH=SYS_EXPORT_FULL_01
-- 停止作業(掛接後 Ctrl+C 或 KILL_JOB)
-- 刪除殘留作業表
DROP TABLE SYS.DATAPUMP_JOB_SYS_EXPORT_FULL_01;
結語
Data Pump 是 Oracle 現代化數據移動的標準工具。掌握其並行架構、目錄對象機制、豐富過濾參數、跨版本遷移能力,並結合加密壓縮、網絡模式、元數據轉換等高級特性,可構建高效、安全、自動化的數據遷移與備份體系。