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

Oracle Exp/Imp 經典工具實戰指南:三種模式、參數檔、常用場景全解析

     編輯:Oracle 資料庫基礎

前言:雖老但彌堅的邏輯備份工具

Oracle Data Pump (expdp/impdp) 雲為主流,但原版 exp/imp 仍在舊版本維護、跨版本遷移(如 9i→11g)、簡單表級備份、無 Directory 物件權限環境中廣泛使用。本文系統整理 exp/imp 三種工作模式、參數檔最佳實踐、常用場景指令範本。

一、三種工作模式

1. 互動式模式

$ exp
# 按提示輸入:用戶/密碼、匯出檔、全量/用戶/表模式、壓縮、授權、索引等

適合臨時、一次性、參數較少的操作;不適合自動化腳本。

2. 命令列模式

$ exp user/pwd@dbname file=/backup/test.dmp full=y
# 或
$ exp user/pwd@dbname file=/backup/test.dmp owner=SCOTT

適合簡單固定參數的排程作業;參數多時命令過長難維護。

3. 參數檔模式(推薦生產環境)

$ exp parfile=scott_exp.par

scott_exp.par 內容:

userid=scott/tiger
buffer=8192000
compress=n
grants=y
file=/backup/scott_20240115.dmp
log=/backup/scott_20240115.log
full=n
owner=scott
rows=y
indexes=y
constraints=y
statistics=none

優勢:參數與腳本分離、易版控、支援註解、避免密碼出現在進程列表(ps -ef 可見)。

二、三大匯出模式對照

模式參數適用場景範例
全量FULL=Y整庫遷移、災難恢復基準備份exp system/xxx file=full.dmp full=y
用戶/SchemaOWNER=(user1,user2)應用 Schema 遷移、開發環境刷新exp system/xxx file=app.dmp owner=APP_USER
表級TABLES=(t1,t2)單表備份、測試資料製造、跨庫同步特定表exp app/app file=t1.dmp tables=T1,T2

三、關鍵參數深度解析

參數預設建議值影響
BUFFER40968M~64M記憶體緩衝區大小,直接影響匯出速度
COMPRESSYNY=匯入時合併 Extents(易導致大表無法匯入),N=保留原儲存參數
GRANTSYY匯出物件授權
INDEXESYY匯出索引定義
ROWSYY/NN=僅匯出結構(Metadata Only)
CONSTRAINTSYY匯出約束定義
STATISTICSESTIMATENONE避免匯入過時統計,遷移後重收
DIRECTNYDirect Path Export,繞過 SQL 層,大表加速 2-5 倍
CONSISTENTNYRead-Only 一致性視圖(Undo 消耗大),跨表一致性需求時開啟
QUERY--表級 WHERE 條件匯出子集,如 QUERY="WHERE created_dt > SYSDATE-30"
FILESIZE02G/4G分卷大小,突破檔案系統 2GB/4GB 限制
FEEDBACK010000每 N 行顯示進度點,長時間作業可視化

四、常用場景指令範本

1. Schema 級備份(含資料)

exp system/xxx parfile=app_backup.par
# app_backup.par
userid=system/xxx
file=/backup/app_20240115.dmp
log=/backup/app_20240115.log
owner=APP_USER
buffer=32000000
compress=n
grants=y
indexes=y
constraints=y
rows=y
statistics=none
feedback=50000

2. 結構遷移(無資料)

exp system/xxx file=schema_struct.dmp owner=APP_USER rows=n

3. 大表分條件匯出(按日期分片)

exp app/app file=orders_2023Q1.dmp tables=ORDERS \
query="WHERE order_date >= TO_DATE('2023-01-01','YYYY-MM-DD') AND order_date < TO_DATE('2023-04-01','YYYY-MM-DD')" \
buffer=64000000 direct=y

4. 含 LONG/LOB 欄位的表匯出

exp app/app file=doc.dmp tables=DOCUMENTS \
buffer=64000000 direct=n  -- LONG/LOB 不支援 DIRECT=Y
# 或改用 SQL*Plus COPY 命令(見遷移技巧篇)

五、Imp 匯入關鍵參數

參數預設建議說明
IGNORENY忽略建立錯誤(表已存在),繼續載入資料
COMMITNY每陣列提交,減少 Undo/Rollback Segment 壓力
FROMUSER/TOUSER--Schema 重映射,如 FROMUSER=OLD TOUSER=NEW
INDEXESYY匯入索引
CONSTRAINTSYY匯入約束
SKIP_UNUSABLE_INDEXESNY跳過不可用索引維護,大幅加速匯入
DESTROYN謹慎表空間傳輸模式下覆蓋資料檔

六、版本相容性鐵律

  • Imp 可向上相容:Imp 11g 可讀 Exp 9i/10g 的 DMP。
  • Imp 不可向下相容:Imp 9i 無法讀 Exp 11g 的 DMP(會報 IMP-00010)。
  • 跨版本遷移:目標端版本 ≥ 來源端版本,使用目標端的 Imp 工具。

七、字符集陷阱

匯出/匯入雙端 NLS_LANG 必須一致(或來源為目標的子集)。不一致會導致字符損壞(如中文變亂碼)。檢查:

SELECT * FROM nls_database_parameters WHERE parameter IN ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');
# 客戶端環境變數
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK  # 或 AL32UTF8

結語

Exp/Imp 雖為前代工具,但在跨大版本遷移、無 Directory 權限環境、簡單表級備份/同步場景仍具不可替代性。掌握參數檔模式、關鍵參數(COMPRESS=N, DIRECT=Y, CONSISTENT=Y, STATISTICS=NONE)、版本相容鐵律與字符集檢查,即可駕輕就熟應對各類邏輯備份需求。

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