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

Oracle EXP/IMP 邏輯備份遷移完整語法與實戰參數指南

     編輯:Oracle 資料庫相關知識

核心工具

  • `exp` / `expdp` (Data Pump, 10g+ 推薦) - 匯出
  • `imp` / `impdp` - 匯入

本文聚焦傳統 `exp/imp` (仍廣泛用於中小庫、跨版本遷移)。

一、EXP 匯出語法與參數

exp userid/password@tns_alias
    FILE=dump.dmp
    LOG=exp.log
    [FULL=Y | OWNER=schema1,schema2 | TABLES=t1,t2]
    [QUERY="WHERE condition"]
    [BUFFER=8192]
    [COMPRESS=N]
    [GRANTS=Y]
    [INDEXES=Y]
    [CONSTRAINTS=Y]
    [CONSISTENT=Y]
    [STATISTICS=ALWAYS]

二、IMP 匯入語法與參數

imp userid/password@tns_alias
    FILE=dump.dmp
    LOG=imp.log
    [FULL=Y | FROMUSER=src_schema TOUSER=target_schema | TABLES=t1,t2]
    [IGNORE=Y]
    [COMMIT=Y]
    [BUFFER=2048000]
    [GRANTS=Y]
    [INDEXES=Y]
    [SHOW=N]

三、實戰範例

1. 完整庫匯出/匯入

# 匯出
exp system/manager@TEST FILE=d:\daochu.dmp FULL=Y

# 匯入
imp system/manager@TEST FILE=d:\daochu.dmp

2. 指定 Schema 匯出/匯入

# 匯出 SYSTEM, SYS (慎用 SYS)
exp system/manager@TEST FILE=d:\daochu.dmp OWNER=(system,sys)

# 匯入並重映射 Schema
imp aichannel/aichannel@HUST FULL=Y FILE=d:\data\newsmgnt.dmp IGNORE=Y

3. 表級匯出/匯入

# 匯出多表
exp aichannel/aichannel@TESTDB2 FILE=d:\data\newsmgnt.dmp TABLES=(inner_notify,notify_staff_relat)

# 匯入指定表
imp system/manager@TEST FILE=d:\daochu.dmp TABLES=(table1)

4. 條件匯出 (WHERE 子句)

exp system/manager@TEST FILE=d:\daochu.dmp TABLES=(table1) QUERY="WHERE filed1 LIKE '00%'"

5. 定時備份腳本 (Linux/Unix Shell)

#!/bin/bash
dateString=$(date +%y%m%d%H%M)
exp userid/password TABLES=table1,table2 \
    FILE=/backup/backup_${dateString}.dmp \
    BUFFER=8192 GRANTS=Y COMPRESS=N

四、關鍵參數深度解析

參數預設建議說明
FULLNY (完整備份)需 DBA 權限,包含所有用戶對象
OWNER-Schema 列表僅匯出指定擁有者
TABLES-表列表支援分區表 `table:partition`
QUERY-條件過濾僅適用 TABLES 模式,需雙引號
BUFFER4096大表調大 (MB 級)資料緩衝區,影響效能
COMPRESSYNY 會嘗試將段壓縮到單一 extent,大表匯入易失敗
CONSISTENTNY (熱備份)Y 使用 SET TRANSACTION READ ONLY,確保時間點一致性
IGNORENY (遷移/重建)Y 忽略建表錯誤 (ORA-00955) 繼續載入資料
COMMITNY (大表)Y 每陣列提交,避免巨大交易回滾段
STATISTICSALWAYSALWAYS匯出優化器統計資訊
SHOWNY (預覽)僅顯示 DDL 不實際匯入

五、常見問題與對策

問題原因解決
IMP-00009: 已存在表目標表已存在加 `IGNORE=Y` 或先 `DROP TABLE`
EXP-00008: ORACLE error 942權限不足授予 `EXP_FULL_DATABASE` / `DBA`
字符集不匹配NLS_LANG 不一致設定 `NLS_LANG=.AL32UTF8` (或源庫字符集)
大表匯入極慢索引/約束同步維護先 `INDEXES=N CONSTRAINTS=N` 匯入資料,再 `imp ... INDEXFILE=idx.sql` 產生腳本手動建索引
跨版本遷移 (11g→19c)傳統 exp/imp 仍支援目標庫用較高版本 imp 導入低版本 dmp,或改用 Data Pump (expdp/impdp) + VERSION 參數

六、Data Pump (expdp/impdp) 快速對照

# 匯出
expdp system/manager@TEST DIRECTORY=dp_dir DUMPFILE=full_%U.dmp FULL=Y PARALLEL=4

# 匯入
impdp system/manager@TEST DIRECTORY=dp_dir DUMPFILE=full_01.dmp REMAP_SCHEMA=src:tgt TABLE_EXISTS_ACTION=REPLACE
  • 需建立 `DIRECTORY` 物件指向 OS 目錄
  • 支援並行、壓縮、加密、網絡鏈接、過濾、重映射
  • 大庫 (>100G) **強制使用 Data Pump**
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved