EXP/IMP 是 Oracle 資料庫早期提供的邏輯備份與恢復工具組,雖然功能不如後來的 Data Pump (expdp/impdp) 強大,但在舊版本環境或特定場景下仍具參考價值。本文將系統整理 EXP/IMP 的核心參數、常見操作模式與實戰範例,幫助您快速掌握這套經典工具的使用要領。
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
Enterprise Linux Server release 5.5 (Carthage)
執行 exp help=y 可查看完整參數列表。關鍵參數說明如下:
| 參數 | 說明 | 預設值 |
|---|---|---|
| USERID | 用戶名/密碼 (必須為第一個參數) | - |
| FULL | 匯出整個資料庫 | N |
| OWNER | 指定擁有者列表 (匯出特定用戶) | - |
| TABLES | 指定表列表 (支援分區表語法 T1:P1) | - |
| TABLESPACES | 指定表空間列表 | - |
| FILE | 輸出檔案名 | EXPDAT.DMP |
| BUFFER | 資料緩衝區大小 | 4096 |
| GRANTS | 匯出權限 | Y |
| INDEXES | 匯出索引 | Y |
| ROWS | 匯出資料列 | Y |
| CONSISTENT | 跨表一致性 (使用 undo 確保讀一致性) | N |
| DIRECT | 直接路徑匯出 (效能較佳) | N |
| LOG | 記錄檔名稱 | - |
| PARFILE | 參數檔名稱 (避免命令行過長) | - |
| QUERY | 匯出表的子集 WHERE 子句 | - |
| FLASHBACK_SCN/TIME | 基於 SCN 或時間點的快照匯出 | - |
| COMPRESS | 匯入時壓縮到一個區塊 | Y |
| FILESIZE | 單一轉儲檔最大大小 | - |
EXP 支援兩種呼叫方式:
exp 後依提示輸入參數,適合臨時操作。exp system/manager full=y file=full_db.dmp log=full_exp.log[oracle@localhost ~]$ exp hr/hr file=hr_schema.dmp log=hr_exp.log
# 或使用參數檔 parfile=hr_exp.par
# 內容:
# userid=hr/hr
# file=hr_schema.dmp
# log=hr_exp.log
# owner=hr
# grants=y
# indexes=y
# rows=y
exp system/manager full=y file=full_db.dmp log=full_exp.log consistent=y
輸出檔案較大,建議搭配 FILESIZE 參數分割檔案。
# 以表擁有者身分匯出
exp hr/hr tables=hr.employees,hr.departments file=hr_tables.dmp
# 以 DBA 身分匯出他人表 (需指定 schema.table)
exp system/manager tables=hr.employees file=hr_emp.dmp
exp system/manager tablespaces=USERS,EXAMPLE file=tbs_users.dmp log=tbs_exp.log
執行 imp help=y 可查看參數。核心參數對照表:
| 參數 | 說明 | 預設值 |
|---|---|---|
| USERID | 用戶名/密碼 | - |
| FULL | 匯入整個轉儲檔 | N |
| FROMUSER | 來源用戶列表 | - |
| TOUSER | 目標用戶列表 (配合 FROMUSER 實現 schema 重映射) | - |
| TABLES | 指定匯入表列表 | - |
| FILE | 輸入轉儲檔 | EXPDAT.DMP |
| IGNORE | 忽略建立錯誤 (如表已存在) | N |
| GRANTS | 匯入權限 | Y |
| INDEXES | 匯入索引 | Y |
| ROWS | 匯入資料列 | Y |
| LOG | 記錄檔 | - |
| BUFFER | 資料緩衝區大小 | - |
| COMMIT | 陣列插入後提交 | N |
| DESTROY | 覆蓋表空間資料檔 (慎用) | N |
| INDEXFILE | 將 DDL 輸出至檔案而不實際匯入 | - |
| DATA_ONLY | 僅匯入資料,不建立物件 | N |
imp hr/hr tables=employees file=hr_emp.dmp ignore=y log=hr_imp.log
imp system/manager full=y file=full_db.dmp ignore=y log=full_imp.log
# 將 HR 結構下的表匯入到 SYSTEM 結構
imp system/manager tables=employees fromuser=hr touser=system file=hr_emp.dmp ignore=y
imp hr/hr file=hr_schema.dmp rows=n log=hr_struct.log
NLS_LANG 環境變數控制客戶端字符集。DIRECT=Y 並適當調大 BUFFER 參數。CONSISTENT=Y 確保讀一致性,但會增加 UNDO 表空間壓力。PARFILE 避免命令行長度限制與密碼明文洩露。EXP_FULL_DATABASE 角色,FULL 匯入需 IMP_FULL_DATABASE 角色。EXP/IMP 雖屬傳統工具,但在 Oracle 10g/11g 環境維護、小規模資料遷移、結構對比等場景仍具實用性。掌握其核心參數組合,配合參數檔與日誌記錄,能有效完成邏輯備份與恢復任務。新專案建議優先採用 Data Pump (expdp/impdp) 以獲得更佳效能、並行度與細粒度控制。