Oracle 原生邏輯備份工具 `exp`/`imp` (Data Pump 前身) 雖已被 `expdp`/`impdp` 取代,但在舊版本維護、跨版本遷移、小型資料庫仍廣泛使用。本文系統整理三種執行模式、三種匯出模式、進階選項 (分割檔案、增量備份、SYSDBA、傳輸表空間)、效能調優、UNIX 管道壓縮技巧、常見字符集/版本相容問題。
exp help=y
imp help=y
userid=user/pass buffer=8192000 compress=n grants=y file=/dir/xxx.dmp full=y
| 模式 | 匯出範例 | 匯入範例 |
|---|---|---|
| 表模式 | `exp user/pwd file=xxx.dmp tables=t1,t2` `exp user/pwd file=xxx.dmp tables=t1 query="where col1='val'"` | `imp user/pwd file=xxx.dmp tables=t1,t2 fromuser=u1 touser=u2 commit=y ignore=y` |
| 用戶模式 | `exp user/pwd file=xxx.dmp owner=(u1,u2)` 僅結構:`rows=n` | `imp user/pwd file=xxx.dmp fromuser=u1 touser=u2 commit=y ignore=y` |
| 全庫模式 | `exp user/pwd file=xxx.dmp full=y` | `imp user/pwd file=xxx.dmp full=y commit=y ignore=y` |
exp user/pwd file=1.dmp,2.dmp,3.dmp filesize=1000m full=y
imp user/pwd file=1.dmp,2.dmp,3.dmp filesize=1000m ...
匯入:`imp user/pwd full=y inctype=system/restore/inctype`
imp 'sys/pwd@inst as sysdba' tablespaces=ts1 transport_tablespace=y file=xxx.dmp datafiles=xxx.dbf
前 10g 限制: 同平台、同字符集、同區塊大小、目標無同名表空間、SYS 物件不可遷、自包含物件集、部分物件類型不支援。
10g+ 跨平台: 位元組序相同 + RMAN 轉換檔案格式。
| 目標 | 關鍵參數/作法 |
|---|---|
| 加速 EXP | `DIRECT=Y`、`BUFFER` 加大、`LARGE_POOL_SIZE` 增加、輸出檔置本地非 NFS 磁碟、UNIX 管道模式 |
| 加速 IMP | 先 `INDEXFILE` 建索引腳本→匯入數據→建索引;`COMMIT=N`、`ANALYZE=N`;大表空間/回滾段;`NOARCHIVELOG`;單用戶模式;UNIX 管道 |
# 備份: exp 寫入管道 → gzip 壓縮 → 輸出 .dmp.gz
mkfifo /home/exppipe
gzip < /home/exppipe > exp.dmp.gz &
exp user/pwd file=/home/exppipe full=y buffer=20000000
rm /home/exppipe
# 還原: gunzip 解壓 → 管道 → imp 讀取
mkfifo /home/exppipe
gunzip < exp.dmp.gz > /home/exppipe &
imp user/pwd file=/home/exppipe full=y
rm /home/exppipe