首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle Data Pump (expdp/impdp) 深度解析:核心差異、參數詳解與實戰範例

     編輯:Oracle 資料庫基礎

前言

Oracle 10g 引入 Data Pump 技術,以服務端並行處理、流式傳輸、細粒度過濾等特性全面超越傳統 exp/imp。本文深度對比兩代工具,詳解 expdp/impdp 27 大核心參數,提供生產級實戰範例。

一、傳統 exp/imp vs Data Pump 核心差異

維度exp/impexpdp/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 角色
SCHEMASSchema 級SCHEMAS=hr,oe,pm
TABLES表級TABLES=hr.employees,oe.orders:partition_q1
TABLESPACES表空間級TABLESPACES=users,example
TRANSPORT_TABLESPACES可傳輸表空間TRANSPORT_TABLESPACES=tbs_data

3. 內容過濾

參數選項效果
CONTENTALL/DATA_ONLY/METADATA_ONLY控制導出數據還是定義
INCLUDE對象類型[:名稱條款]僅導出指定類型
EXCLUDE對象類型[:名稱條款]排除指定類型
QUERYWHERE 子句數據行級過濾
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. 性能與調試

參數說明
ESTIMATEBLOCKS/STATISTICS 預估大小方法
ESTIMATE_ONLYY 僅預估不導出
LOGFILE日誌文件名
NOLOGFILEY 禁用日誌
METRICSY 記錄詳細性能指標

7. 版本與傳輸

參數說明
VERSIONCOMPATIBLE/LATEST/具體版本號(如 11.2.0.4)
TRANSPORT_FULL_CHECKY/N 可傳輸表空間依賴檢查模式

五、IMPDP 核心參數(重點差異)

參數說明典型值
REMAP_SCHEMASchema 重映射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 現代化數據移動的標準工具。掌握其並行架構、目錄對象機制、豐富過濾參數、跨版本遷移能力,並結合加密壓縮、網絡模式、元數據轉換等高級特性,可構建高效、安全、自動化的數據遷移與備份體系。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved