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

Oracle EXP/IMP 邏輯備份完整指南:參數詳解、實戰範例、表空間傳輸與管道加速技巧

     編輯:Oracle 資料庫基礎

Oracle 原生邏輯備份工具 EXP (匯出) 與 IMP (匯入) 雖被 Data Pump (EXPDP/IMPDP) 取代,但在舊版本遷移、跨版本匯入、小型資料庫維護仍廣泛使用。本文彙整完整參數說明、常見場景範例與進階優化技巧。

核心參數速查

EXP 關鍵參數IMP 關鍵參數
FULL=Y 全庫匯出FULL=Y 全庫匯入
OWNER= 指定擁有者FROMUSER=/TOUSER= 使用者對應
TABLES= 指定表清單TABLES= 指定表匯入
COMPRESS=Y/N 合併 ExtentIGNORE=Y 忽略建立錯誤
DIRECT=Y 直接路徑 (加速)COMMIT=Y 陣列提交
CONSISTENT=Y 一致性匯出INDEXFILE= 產生 DDL 腳本
QUERY= 條件篩選匯出DESTROY=Y 覆蓋表空間檔案
FILESIZE= 分卷大小FILESIZE= 對應分卷匯入

常見實戰範例

1. 全庫匯出/匯入

exp user/pwd@db FILE=/dir/full.dmp LOG=full.log FULL=Y
imp user/pwd@db FILE=/dir/full.dmp LOG=full.log FROMUSER=src TOUSER=tgt

2. 指定使用者/表匯出

exp user/pwd OWNER=scott FILE=scott.dmp
exp user/pwd TABLES=emp,dept FILE=tables.dmp
exp user/pwd TABLES=(emp:partition_p1) FILE=part.dmp  -- 分區表
exp user/pwd TABLES=emp QUERY="WHERE job='SALESMAN'" FILE=query.dmp

3. 參數檔模式 (避免命令行過長)

exp PARFILE=exp.par
-- exp.par 內容:
USERID=user/pwd
BUFFER=8192000
COMPRESS=N
GRANTS=Y
FILE=/backup/exp.dmp
FULL=Y

4. 分卷匯出/匯入 (大檔案系統限制)

exp user/pwd FILE=exp1.dmp,exp2.dmp,exp3.dmp FILESIZE=1000M FULL=Y
imp user/pwd FILE=exp1.dmp,exp2.dmp,exp3.dmp FILESIZE=1000M FROMUSER=src TOUSER=tgt

5. 增量匯出/匯入

exp user/pwd INCTYPE=COMPLETE FILE=inc0.dmp   -- 完全 (基準)
exp user/pwd INCTYPE=INCREMENTAL FILE=inc1.dmp -- 增量 (自上次任意備份)
exp user/pwd INCTYPE=CUMULATIVE FILE=inc2.dmp  -- 累積 (自上次完全備份)

imp user/pwd FULL=Y INCTYPE=RESTORE FILE=inc0.dmp  -- 還原

6. SYSDBA 身分匯出/匯入

exp '/ AS SYSDBA' FILE=sys.dmp FULL=Y
imp '/ AS SYSDBA' FILE=sys.dmp FULL=Y

表空間傳輸 (TTS) - 9i/10g+ 支援

將唯讀表空間的資料檔 + 中繼資料 (DMP) 直接掛載到目標庫,速度極快。

  1. 來源庫:ALTER TABLESPACE app_data READ ONLY;
  2. 匯出中繼資料:exp TRANSPORT_TABLESPACE=Y TABLESPACES=(app_data,app_index) FILE=tts.dmp
  3. 複製 .dbf 資料檔 + .dmp 至目標主機 (二進位模式 FTP)。
  4. 來源庫恢復:ALTER TABLESPACE app_data READ WRITE;
  5. 目標庫匯入:imp TRANSPORT_TABLESPACE=Y DATAFILES=('...') TABLESPACES=... TTS_OWNERS=... FILE=tts.dmp
  6. 目標庫:ALTER TABLESPACE app_data READ WRITE;

前置檢查:EXEC SYS.DBMS_TTS.TRANSPORT_SET_CHECK('tablespace_name', TRUE); SELECT * FROM SYS.TRANSPORT_SET_VIOLATIONS;

EXP/IMP 效能優化清單

EXP 加速

  • DIRECT=Y 繞過 SQL 層直接讀資料塊。
  • 加大 BUFFER、LARGE_POOL_SIZE。
  • 輸出檔放非資料庫磁碟,避免 NFS。
  • Unix/Linux 使用管道配合 gzip 即時壓縮 (見下節)。

IMP 加速

  • 建立 INDEXFILE 先產生 DDL,資料匯入後再建索引。
  • 匯入檔與資料檔置於不同磁碟。
  • COMMIT=N、ANALYZE=N、大表空間/回滾段、單用戶模式、NOARCHIVELOG。

Unix/Linux 管道模式即時壓縮/解壓 (零落地中間檔)

# 匯出並壓縮
mkfifo /home/exp.pipe
compress < /home/exp.pipe > exp.dmp.Z &
exp user/pwd FILE=/home/exp.pipe FULL=Y BUFFER=20000000
rm /home/exp.pipe

# 解壓並匯入
mknod /home/imp.pipe p
gunzip < exp.dmp.gz > /home/imp.pipe &
imp user/pwd FILE=/home/imp.pipe FROMUSER=src TOUSER=tgt
rm /home/imp.pipe

管道模式消除中間 DMP 檔 I/O,大幅縮短總耗時。

常見遷移坑點提醒

  • 目標物件已存在:先 DROP 或用 IGNORE=Y (注意唯一鍵約束導致資料不入/重複)。
  • 主外鍵約束:先匯入主表、再匯入從表,或暫停約束匯入完再啟用。
  • 權限不足:跨用戶匯入需 IMP_FULL_DATABASE 權限。
  • 大表 COMPRESS=Y 導致匯入失敗:匯出時改 COMPRESS=N。
  • 字元集不符:調整 NLS_LANG 環境變數/登錄表匯入後再改回。
  • 版本向上不相容:IMP 僅能匯入同版或低版 EXP 產生的檔案。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved