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

Oracle EXP/IMP 匯出匯入命令實戰指南:參數詳解與常用場景

     編輯:Oracle 資料庫基礎

EXP/IMP 概覽

EXP (Export) 與 IMP (Import) 是 Oracle 早期提供的邏輯備份工具,透過將資料導出為二進制 .dmp 檔案,實現資料遷移、備份還原、環境複製等功能。雖然 Oracle 10g+ 推薦使用 Data Pump (EXPDP/IMPDP),但 EXP/IMP 仍廣泛用於小型資料庫、跨版本遷移、表級操作等場景。

EXP 匯出命令核心參數

參數說明預設值常用範例
USERID連線帳號/密碼[@TNS]必填system/manager@ORCL
FILE輸出 .dmp 檔案路徑EXPDAT.DMPFILE=d:\backup\exp_full.dmp
FULL完整資料庫匯出 (需 DBA 權限)NFULL=Y
OWNER指定匯出的 Schema 列表-OWNER=(SCOTT, HR)
TABLES指定匯出的表列表-TABLES=(EMP, DEPT)
QUERY指定 WHERE 條件匯出子集資料-QUERY="WHERE deptno=10"
ROWS是否匯出資料列YROWS=N (僅結構)
COMPRESS匯入時合併區段 (初始區段大小)YCOMPRESS=N
CONSISTENT交易一致性匯出 (需 UNDO 空間)NCONSISTENT=Y
LOG記錄檔路徑螢幕輸出LOG=d:\backup\exp.log
DIRECT直接路徑匯出 (繞過 SQL 層,較快)NDIRECT=Y
INCTYPE增量匯出類型 (COMPLETE/CUMULATIVE/INCREMENTAL)-Oracle 9i 後不建議使用
FILESIZE單一 .dmp 最大大小 (支援多檔案)-FILESIZE=2G
PARFILE參數檔路徑 (避免命令行過長)-PARFILE=exp.par

IMP 匯入命令核心參數

參數說明預設值常用範例
FILE輸入 .dmp 檔案路徑EXPDAT.DMPFILE=d:\backup\exp.dmp
FULL完整匯入NFULL=Y
FROMUSER來源 Schema 對應-FROMUSER=SCOTT
TOUSER目標 Schema 對應-TOUSER=HR
TABLES指定匯入的表-TABLES=(EMP, DEPT)
IGNORE忽略建立錯誤 (表已存在等)NIGNORE=Y
INDEXES是否匯入索引YINDEXES=N
CONSTRAINTS是否匯入約束YCONSTRAINTS=N
GRANTS是否匯入權限YGRANTS=N
ROWS是否匯入資料YROWS=N
COMMIT定期提交 (避免大交易回滾段不足)NCOMMIT=Y
BUFFER資料緩衝區大小系統預設BUFFER=65536

實戰常用場景範例

1. 完整資料庫備份 (需 DBA 權限)

exp system/manager@ORCL FILE=d:\backup\full_exp.dmp FULL=Y LOG=d:\backup\full_exp.log

2. 特定 Schema 結構與資料

exp scott/tiger@ORCL FILE=d:\backup\scott.dmp OWNER=SCOTT LOG=d:\backup\scott.log

3. 僅匯出表結構 (無資料)

exp scott/tiger@ORCL FILE=d:\backup\scott_struct.dmp TABLES=(EMP, DEPT) ROWS=N

4. 條件式匯出子集資料

exp scott/tiger@ORCL FILE=d:\backup\emp_dept10.dmp TABLES=EMP QUERY="WHERE deptno=10"

5. 跨 Schema 匯入 (重命名 Schema)

imp scott/tiger@ORCL FILE=d:\backup\hr.dmp FROMUSER=HR TOUSER=SCOTT IGNORE=Y LOG=d:\backup\imp.log

6. 僅匯入特定表,忽略已存在錯誤

imp scott/tiger@ORCL FILE=d:\backup\full.dmp TABLES=(EMP, DEPT) IGNORE=Y

7. 參數檔案模式 (避免特殊字元轉義問題)

-- exp.par 內容
USERID=system/manager@ORCL
FILE=d:\backup\full.dmp
FULL=Y
LOG=d:\backup\full.log
COMPRESS=Y
CONSISTENT=Y

-- 執行
exp PARFILE=exp.par

字符集與 NLS 關鍵設定

匯出匯入過程涉及三層字符集轉換:

資料庫字符集 → 客戶端 NLS_LANG → 匯入端資料庫字符集

關鍵原則

  • 匯出端:設定 NLS_LANG 與資料庫字符集一致,避免轉換損失
  • 匯入端:設定 NLS_LANG 與目標資料庫字符集一致
  • .dmp 檔案頭:記錄匯出時的字符集 ID (第 2-3 位元組)

字符集修正技巧 (緊急情況)

-- 1. 查看 .dmp 字符集 ID
-- 用二進制編輯器查看第 2-3 位元組,如 0x0001 = 1
SELECT NLS_CHARSET_NAME(1) FROM dual;  -- US7ASCII

-- 2. 取得目標字符集 ID
SELECT NLS_CHARSET_ID('ZHS16GBK') FROM dual;  -- 852 = 0x0354

-- 3. 修改 .dmp 第 2-3 位元組為 03 54
-- 使用 UltraEdit、WinHex 等工具修改後再匯入

跨版本遷移規則

場景EXP 版本IMP 版本說明
高版本 → 低版本低版本 EXP目標版本 IMP如 11g→10g,用 10g EXP
低版本 → 高版本來源版本 EXP目標版本 IMP如 10g→11g,用 11g IMP
同版本同版本同版本最佳相容性

EXP/IMP vs Data Pump (EXPDP/IMPDP) 選擇指南

維度EXP/IMPData Pump
效能單執行緒,較慢並行處理,快 10-100 倍
大物件支援受限於客戶端記憶體伺服器端串流,支援 TB 級
網路模式不支援支援 NETWORK_LINK 直連
壓縮/加密不支援支援
跨版本支援較好需相容版本參數
適用場景小型 DB、跨版本、表級操作生產環境備份、大型遷移

常見問題排查

錯誤現象原因解決方案
IMP-00010: not a valid export file.dmp 損壞或非 EXP 產生重新匯出、檢查傳輸模式 (FTP 用 BINARY)
IMP-00017: following statement failed建立物件失敗 (權限、空間、字符集)查看 LOG 詳細錯誤,預建表空間/用戶
ORA-02374: conversion error字符集轉換失敗統一 NLS_LANG 設定
Snapshot too old (CONSISTENT=Y)UNDO 空間不足增加 UNDO 表空間或關閉 CONSISTENT

總結

EXP/IMP 雖為經典工具,但在小型資料庫備份、跨版本遷移、開發測試資料準備等場景仍具不可替代價值。掌握核心參數組合、字符集處理、跨版本規則與常見錯誤排查,能讓你在缺乏 Data Pump 權限或環境受限時,依然高效完成資料遷移任務。

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