Oracle exp/imp 是傳統邏輯備份/還原工具,相當於資料庫級「備份與還原」。exp 將遠端資料導出為本地 .dmp 二進位檔,imp 將 .dmp 導入遠端資料庫,可構建測試/正式雙環境。本文彙整八大導出場景、四大導入場景、壓縮技巧、權限授予腳本與擁有者變更技巧。
SQL*Plus 或 DOS/Shell 執行$ORACLE_HOME/bin 含 exp.exe、imp.exe(Java 包裝類)| 場景 | 指令範例 | 關鍵參數 |
|---|---|---|
| 完整資料庫導出 | exp system/manager@TEST file=d:\daochu.dmp full=y | full=y |
| 指定 Schema 導出 | exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys) | owner |
| 指定表導出 | exp aichannel/aichannel@TESTDB2 file=d:\data\newsmgnt.dmp tables=(inner_notify,notify_staff_relat) | tables |
| 條件式導出 | exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query="WHERE filed1 LIKE '00%'" | query |
| 導出並壓縮 | 上述指令加 compress=y 或事後 winzip | compress=y |
| 場景 | 指令範例 | 關鍵參數 |
|---|---|---|
| 完整導入 | imp system/manager@TEST file=d:\daochu.dmp | - |
| 完整導入忽略錯誤 | imp aichannel/aichannel@HUST full=y file=d:\data\newsmgnt.dmp ignore=y | ignore=y 跳過物件已存在錯誤 |
| 指定表導入 | imp system/manager@TEST file=d:\daochu.dmp tables=(table1) | tables |
| 不同 Schema 間導入 | imp system/manager file=tank.log fromuser=seapark touser=seapark_copy | fromuser/touser |
EXP_FULL_DATABASE、IMP_FULL_DATABASE、DBA 等角色tnsping <TNS名> 驗證連線imp 版本需 ≥ exp 版本(向上相容)DROP TABLE 再 imp-- 1. 建立使用者(若不存在)
CREATE USER username IDENTIFIED BY password;
-- 2. 授予完整權限
GRANT CREATE USER, DROP USER, ALTER USER,
CREATE ANY VIEW, DROP ANY VIEW,
EXP_FULL_DATABASE, IMP_FULL_DATABASE,
DBA, CONNECT, RESOURCE, CREATE SESSION
TO username;
-- 3. 執行匯入
imp userid=system/manager full=y file=backup.dmp
Oracle 不支援直接 ALTER TABLE ... OWNER TO ...,利用 exp/imp 間接實現:
# 1. 導出
exp system/manager file=obj.dmp owner=old_user
# 2. 建立參數檔 import.par
fromuser=old_user
touser=new_user
file=obj.dmp
ignore=y
# 3. 匯入
imp parfile=import.par
exp/imp 雖為傳統工具,在跨版本遷移、Schema 重組、小量資料同步場景仍具不可替代性。掌握 full/owner/tables/query/compress/ignore/fromuser/touser/parfile 核心參數組合,即能應對 90% 實務需求。大量資料場景建議改用 Data Pump (expdp/impdp) 並行處理。