Oracle 傳統導出導入工具(exp/imp)雖已被 Data Pump (expdp/impdp) 取代,但在舊版本遷移、小型數據備份、跨版本兼容等場景仍廣泛使用。本文詳述標準操作流程、參數詳解及常見錯誤處理。
C:\> exp
或直接指定可執行文件路徑:ORACLE_HOME\bin\exp.exe
| 提示項 | 輸入示例 | 說明 |
|---|---|---|
| Username/Password@Service | NCS_TEST/K@GAICHU | 連接字串,含用戶、密碼、服務名 |
| Export file | c:\backup\data.dmp | 導出文件完整路徑 |
| Buffer size | [回車使用默認] | 數據緩衝區大小 |
| 其他選項 | 一路回車 | 採用默認值完成導出 |
exp userid/password@service file=d:\backup\full_exp.dmp full=y log=d:\backup\exp.log
C:\> imp
| 提示項 | 輸入示例 | 說明 |
|---|---|---|
| Username/Password@Service | NCS_TEST/K@GAICHU | 目標資料庫連接 |
| Import file | c:\backup\data.dmp | 來源導出文件 |
| Buffer size | [回車默認] | 緩衝區大小 |
| Ignore create errors | Y | 忽略對象已存在錯誤(關鍵參數) |
imp userid/password@service file=d:\backup\full_exp.dmp full=y ignore=y log=d:\backup\imp.log
| 參數 | 適用工具 | 作用 | 推薦值 |
|---|---|---|---|
| FULL | exp/imp | 全庫導出/導入 | Y |
| OWNER | exp | 指定導出用戶(Schema) | user1,user2 |
| TABLES | exp/imp | 表級導出/導入 | table1,table2 |
| FILE | exp/imp | 導出/導入文件路徑 | path/file.dmp |
| LOG | exp/imp | 日誌文件路徑 | path/log.log |
| IGNORE | imp | 忽略對象創建錯誤 | Y(生產導入必加) |
| GRANTS | exp/imp | 導出/導入權限 | Y |
| INDEXES | exp/imp | 導出/導入索引 | Y |
| COMPRESS | exp | 壓縮區塊(初始區塊=總大小) | N(大表建議 N) |
| BUFFER | exp/imp | 緩衝區大小(字節) | 8192/2048000 |
| COMMIT | imp | 提交頻率 | Y |
| QUERY | exp | 導出數據過濾條件 | "WHERE deptno=20" |
| FROMUSER/TOUSER | imp | Schema 重映射 | scott/hr |
原因:連接字串錯誤,tnsnames.ora 配置缺失或服務名拼寫錯誤
排查:
原則:客戶端版本 ≥ 服務端版本,或至少主版本一致
解決:添加 `IGNORE=Y` 參數,跳過創建對象階段,直接導入數據
#!/bin/bash
# 每日全量導出
DATE_STR=$(date +%Y%m%d%H%M)
EXP_FILE="/backup/exp_full_${DATE_STR}.dmp"
LOG_FILE="/backup/exp_full_${DATE_STR}.log"
exp system/manager@ORCL file=${EXP_FILE} full=y buffer=8192 grants=y compress=n log=${LOG_FILE}
# 保留 7 天備份
find /backup -name "exp_full_*.dmp" -mtime +7 -delete
find /backup -name "exp_full_*.log" -mtime +7 -delete
@echo off
set DATE_STR=%date:~,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%
set DATE_STR=%DATE_STR: =0%
set EXP_FILE=D:\backup\exp_full_%DATE_STR%.dmp
set LOG_FILE=D:\backup\exp_full_%DATE_STR%.log
exp system/manager@ORCL file=%EXP_FILE% full=y buffer=8192 grants=y compress=n log=%LOG_FILE%
:: 刪除 7 天前備份
forfiles /p D:\backup /m exp_full_*.dmp /d -7 /c "cmd /c del @path"
forfiles /p D:\backup /m exp_full_*.log /d -7 /c "cmd /c del @path"
| 場景 | 推薦工具 | 理由 |
|---|---|---|
| 10g 及以上常規維護 | expdp/impdp | 並行處理、網絡模式、更細粒度控制、性能優 |
| 9i/10g 老舊系統 | exp/imp | 原生支持,無需目錄對象 |
| 跨版本遷移(如 10g→19c) | expdp/impdp | 版本兼容參數 VERSION 支持 |
| 小表單表導出/導入 | exp/imp | 輕量、無需建目錄對象 |
| 生產環境大數據量 | expdp/impdp | PARALLEL 並行、壓縮、加密 |
掌握 exp/imp 基礎操作是 DBA 必備技能。實際生產中,強烈建議: