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

Oracle EXP/IMP 邏輯備份還原全攻略:命令參數、壓縮、分用戶/分表/條件導出、異機遷移、Parfile 模板

     編輯:Oracle 資料庫相關知識

經典 EXP/IMP (Original Export/Import) 雖被 EXPDP/IMPDP 取代,但在 10g 及以下、小數據量、跨版本遷移、簡單邏輯備份場景仍具不可替代價值。本文系統梳理全庫/用戶/表/條件導出、導入參數、壓縮、Parfile 模板、異機遷移、常見報錯應對。

一、核心參數對照表

參數EXPIMP說明
USERID用戶/密碼@TNS用戶/密碼@TNS連接字符串,AS SYSDBA 需外部認證
FULLY/NY/N全庫導出/導入(需 EXP_FULL_DATABASE/IMP_FULL_DATABASE 役)
OWNER用戶列表-指定 Schema 導出
TABLES表列表表列表指定表導出/導入,支持 SCHEMA.TABLE
QUERYWHERE 子句-條件導出,QUERY=\"WHERE col > 100\" (雙引號轉義)
FILE導出文件導入文件支持多文件 FILE=exp1.dmp,exp2.dmp
LOG日志文件日志文件記錄導出/導入過程
COMPRESSY/N-Y=合併 Extent (導入後表更緊湊),需目標表空間足夠大
CONSISTENTY/N-Y=確保導出數據一致性 (SCN 級),大表增加 Undo 壓力
BUFFER字節數-客戶端緩衝區,建議 10MB+ (10485760)
IGNORE-Y/NY=忽略創建對象錯誤(如表已存在),繼續導入數據
GRANTSY/NY/N導出/導入授權
INDEXESY/NY/N導出/導入索引
CONSTRAINTSY/NY/N導出/導入約束
ROWSY/NY/N導出/導入數據行,N=僅結構
PARFILE參數文件參數文件將參數寫入文件,命令行簡潔

二、經典導出場景實例

# 1. 全庫導出 (需 DBA/EXP_FULL_DATABASE)
exp system/manager@ORCL FILE=/backup/full.dmp LOG=/backup/full.log FULL=Y COMPRESS=Y CONSISTENT=Y BUFFER=10485760

# 2. 指定 Schema 導出
exp system/manager@ORCL FILE=/backup/schema.dmp LOG=/backup/schema.log OWNER=(SCOTT,HR)

# 3. 指定表導出
exp scott/tiger@ORCL FILE=/backup/tables.dmp LOG=/backup/tables.log TABLES=(EMP,DEPT)

# 4. 條件導出 (WHERE 子句,注意引號轉義)
exp system/manager@ORCL FILE=/backup/cond.dmp LOG=/backup/cond.log TABLES=(ORDERS) QUERY="WHERE order_date > TO_DATE('2023-01-01','YYYY-MM-DD')"

# 5. 僅導出結構 (ROWS=N)
exp scott/tiger@ORCL FILE=/backup/struct.dmp LOG=/backup/struct.log ROWS=N

三、經典導入場景實例

# 1. 全庫導入 (需 DBA/IMP_FULL_DATABASE)
imp system/manager@ORCL FILE=/backup/full.dmp LOG=/backup/imp_full.log FULL=Y IGNORE=Y

# 2. 指定表導入
imp scott/tiger@ORCL FILE=/backup/tables.dmp LOG=/backup/imp_tables.log TABLES=(EMP,DEPT) IGNORE=Y

# 3. 異機遷移:Schema 重映射 (FROMUSER/TOUSER)
imp system/manager@NEWDB FILE=/backup/schema.dmp LOG=/backup/remap.log FROMUSER=SCOTT TOUSER=SCOTT_NEW GRANTS=Y INDEXES=Y CONSTRAINTS=Y BUFFER=409600

# 4. Parfile 模板 (import.par)
# FROMUSER=SCOTT
# TOUSER=SCOTT_NEW
# ROWS=Y
# INDEXES=Y
# GRANTS=Y
# CONSTRAINTS=Y
# BUFFER=409600
# FILE=/backup/schema.dmp
# LOG=/backup/imp.log
# 執行:imp PARFILE=import.par

四、壓縮與傳輸優化

  • COMPRESS=Y:導出時合併 Extent,**導入後表更緊湊**,但要求目標表空間有足夠連續空間容納初始 Extent。
  • 外部壓縮:exp ... | gzip > exp.dmp.gz (管道流式壓縮,節省磁盤,需解壓導入)。
  • 網絡導出:exp userid=scott/tiger@REMOTE FILE=local.dmp (客戶端直連遠程數據庫,無需遠程主機磁盤空間)。

五、字符集與版本兼容性

  • 導出/導入端 NLS_LANG **必須一致**,且與數據庫字符集兼容,否則中文亂碼。
  • 高版本導出文件**不可**導入低版本數據庫 (如 11g .dmp → 10g);低版本導出可導入高版本 (向上兼容)。
  • 跨版本遷移首選 EXPDP/IMPDP VERSION= 參數控制導出生成的 DDL 兼容性。

六、常見報錯應對

錯誤原因解決
EXP-00008: ORACLE error 942 encountered權限不足,無法訪問對象授予 SELECT ANY TABLE 或對象級 SELECT
IMP-00003: ORACLE error 955 encountered表已存在加 IGNORE=Y 或先 DROP TABLE
IMP-00017: following statement failed with ORACLE error 2291外鍵約束違反 (父表數據缺失)先導入父表,或 CONSTRAINTS=N 後手動啟用
EXP-00091: Exporting questionable statistics統計信息不可靠導入後 DBMS_STATS.GATHER_SCHEMA_STATS 重收集
LRM-00116: syntax error at 'QUERY'QUERY 參數引號轉義錯誤Windows: QUERY="WHERE col='val'"; Linux: QUERY='WHERE col=\"val\"'

七、EXP/IMP vs EXPDP/IMPDP 選型指南

IF 數據庫版本 <= 10g 或 需跨版本向上遷移 (9i→11g) 或 數據量 < 50GB 且無並行需求
    → EXP/IMP (簡單、客戶端工具、無目錄對象依賴)
ELSE IF 數據量 > 50GB 或 需並行/壓縮/加密/網絡導入/可插拔表空間/精細過濾
    → EXPDP/IMPDP (服務端並行、Data Pump API、功能全面)
ELSE IF 需邏輯備份 + 物理備份混合策略
    → RMAN (物理) + EXPDP (邏輯對象級)

掌握 EXP/IMP 的「參數正交組合、引號轉義、Parfile 模板化、字符集一致性」四大核心,即可在老舊系統維護、跨版本遷移、輕量級邏輯備份場景中游刃有餘。

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