首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 資料匯入匯出完整指南:傳統 exp/imp 與 Data Pump expdp/impdp 參數詳解與實戰

     編輯:Oracle 資料庫相關知識

Oracle 資料移動兩大工具族:傳統 exp/imp(Client-side,10g 前主流)與 expdp/impdp Data Pump(Server-side,10g+ 推薦)。本文對比參數、提供實戰範例、解決跨版本、權限不足等常見問題。

一、傳統 exp/imp(Client 端執行)

exp 關鍵參數

參數說明預設
USERID連線帳密(必須為第一參數)-
FULL全庫匯出N
OWNER指定綱要清單-
TABLES指定表清單(支援分區 T1:P1)-
FILE輸出 .dmp 檔名EXPDAT.DMP
COMPRESS壓縮區段(Y=單一 extent)Y
GRANTS / INDEXES / CONSTRAINTS / TRIGGERS權限/索引/約束/觸發器Y
ROWS匯出資料列Y
LOG日誌檔螢幕
CONSISTENT交叉表一致性(需 UNDO 空間)N
QUERY匯出子集 WHERE 條件-
PARFILE參數檔路徑-

imp 關鍵參數

參數說明預設
USERID連線帳密-
FULL全庫匯入N
FROMUSER / TOUSER來源/目標綱要對應-
TABLES指定表清單-
IGNORE忽略建立錯誤(Y=續跑)N
GRANTS / INDEXES / CONSTRAINTS匯入權限/索引/約束Y
ROWS匯入資料列Y
LOG日誌檔螢幕
INDEXFILE將 DDL 寫入檔案不執行-
COMMIT批次提交頻率 (N=每表提交)N
BUFFER緩衝區大小-

實戰範例

# 匯出 SCOTT 綱要
exp scott/tiger@orcl file=scott.dmp log=scott_exp.log owner=scott grants=y indexes=y

# 匯入至 NEWUSER(綱要重對應)
imp newuser/tiger@orcl file=scott.dmp log=scott_imp.log fromuser=scott touser=newuser ignore=y

# 僅匯入表結構(不含資料)
imp scott/tiger@orcl file=scott.dmp rows=n indexes=n grants=n

二、Data Pump expdp/impdp(Server 端執行,10g+ 必用)

前置:建立目錄物件

CREATE DIRECTORY dpump_dir AS '/u01/dpump';
GRANT READ, WRITE ON DIRECTORY dpump_dir TO scott;

expdp 常用參數

參數說明
DIRECTORY目錄物件名(必填)
DUMPFILE輸出檔名(支援 file%U.dmp 多檔)
LOGFILE日誌檔
SCHEMAS / TABLES / FULL匯出範圍
CONTENTALL/DATA_ONLY/METADATA_ONLY
PARALLEL平行度(需 Enterprise Edition)
COMPRESSIONALL/DATA_ONLY/METADATA_ONLY/NONE
ENCRYPTIONALL/DATA_ONLY/ENCRYPTED_COLUMNS_ONLY/NONE
QUERY表級 WHERE 條件
REMAP_SCHEMA來源:目標綱要
REMAP_TABLESPACE來源:目標表空間
EXCLUDE / INCLUDE物件類型過濾

impdp 常用參數

參數說明
DIRECTORY / DUMPFILE / LOGFILE同上
SCHEMAS / TABLES / FULL匯入範圍
REMAP_SCHEMA / REMAP_TABLESPACE / REMAP_DATAFILE重對應
TABLE_EXISTS_ACTIONSKIP/APPEND/TRUNCATE/REPLACE
TRANSFORMDDL 轉換(如 SEGMENT_ATTRIBUTES:N 去除存儲屬性)
PARTITION_OPTIONS分區處理(NONE/DEPARTITION/MERGE)
SKIP_UNUSABLE_INDEXES跳過不可用索引

實戰範例

# 平行匯出全庫(壓縮、加密)
expdp system/manager@orcl directory=dpump_dir dumpfile=full_%U.dmp logfile=full_exp.log full=y parallel=4 compression=all encryption=all encryption_password=Secret123

# 匯入並重對應綱要與表空間
impdp system/manager@orcl directory=dpump_dir dumpfile=full_01.dmp logfile=full_imp.log remap_schema=scott:newuser remap_tablespace=users:new_users table_exists_action=replace

# 僅匯入中繼資料(結構)
impdp scott/tiger@orcl directory=dpump_dir dumpfile=scott.dmp content=metadata_only

三、常見問題與解決方案

問題原因解決
expdp 空表不匯出11g+ 預設 DEFERRED_SEGMENT_CREATIONALTER SYSTEM SET deferred_segment_creation=FALSE 或 INCLUDE=TABLE
跨版本匯入失敗(如 11g → 19c)字元集、參數不相容使用 Data Pump + VERSION=11.2 參數;必要時先升級目標庫
權限不足 ORA-39002/39006缺少 DATAPUMP_EXP_FULL_DATABASE 角色GRANT DATAPUMP_EXP_FULL_DATABASE, DATAPUMP_IMP_FULL_DATABASE TO user;
網路連線中斷導致作業卡住Client 端 exp/imp 易受網路影響改用 Server 端 Data Pump,或 expdp ... NETWORK_LINK=remote_db
匯入極慢索引、約束同步建立TRANSFORM=INDEXES:N CONSTRAINTS:N 先匯資料,事後重建

選型建議

  • 10g 以前、小資料量、Client 端執行:傳統 exp/imp 簡單直觀。
  • 10g+、大資料量、跨平台、需平行/壓縮/加密:強制使用 Data Pump。
  • 異構遷移(Oracle→PostgreSQL/MySQL):使用 SQL Developer / GoldenGate / CDC 工具,勿用 exp/imp。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved