Oracle 原生邏輯備份工具 EXP (匯出) 與 IMP (匯入) 雖被 Data Pump (EXPDP/IMPDP) 取代,但在舊版本遷移、跨版本匯入、小型資料庫維護仍廣泛使用。本文彙整完整參數說明、常見場景範例與進階優化技巧。
| EXP 關鍵參數 | IMP 關鍵參數 |
|---|---|
FULL=Y 全庫匯出 | FULL=Y 全庫匯入 |
OWNER= 指定擁有者 | FROMUSER=/TOUSER= 使用者對應 |
TABLES= 指定表清單 | TABLES= 指定表匯入 |
COMPRESS=Y/N 合併 Extent | IGNORE=Y 忽略建立錯誤 |
DIRECT=Y 直接路徑 (加速) | COMMIT=Y 陣列提交 |
CONSISTENT=Y 一致性匯出 | INDEXFILE= 產生 DDL 腳本 |
QUERY= 條件篩選匯出 | DESTROY=Y 覆蓋表空間檔案 |
FILESIZE= 分卷大小 | FILESIZE= 對應分卷匯入 |
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
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
exp PARFILE=exp.par
-- exp.par 內容:
USERID=user/pwd
BUFFER=8192000
COMPRESS=N
GRANTS=Y
FILE=/backup/exp.dmp
FULL=Y
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
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 -- 還原
exp '/ AS SYSDBA' FILE=sys.dmp FULL=Y
imp '/ AS SYSDBA' FILE=sys.dmp FULL=Y
將唯讀表空間的資料檔 + 中繼資料 (DMP) 直接掛載到目標庫,速度極快。
ALTER TABLESPACE app_data READ ONLY;exp TRANSPORT_TABLESPACE=Y TABLESPACES=(app_data,app_index) FILE=tts.dmp.dbf 資料檔 + .dmp 至目標主機 (二進位模式 FTP)。ALTER TABLESPACE app_data READ WRITE;imp TRANSPORT_TABLESPACE=Y DATAFILES=('...') TABLESPACES=... TTS_OWNERS=... FILE=tts.dmpALTER TABLESPACE app_data READ WRITE;前置檢查:EXEC SYS.DBMS_TTS.TRANSPORT_SET_CHECK('tablespace_name', TRUE); SELECT * FROM SYS.TRANSPORT_SET_VIOLATIONS;
DIRECT=Y 繞過 SQL 層直接讀資料塊。BUFFER、LARGE_POOL_SIZE。gzip 即時壓縮 (見下節)。INDEXFILE 先產生 DDL,資料匯入後再建索引。COMMIT=N、ANALYZE=N、大表空間/回滾段、單用戶模式、NOARCHIVELOG。# 匯出並壓縮
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 產生的檔案。