利用 exp 將資料導出為 DMP 檔,再用 imp 導入另一資料庫,可快速構建「測試庫=生產庫」的雙環境架構。本文涵蓋執行環境選擇、導出/導入核心指令範本、壓縮策略、字符集與版本相容性、跨庫雙環境建構清單。
HOST exp ... 或 $ exp ...(需啟用 SHELL 權限)。路徑機制:Oracle 安裝目錄 %ORACLE_HOME%\bin (Windows) 或 $ORACLE_HOME/bin (Linux) 已在 PATH 中,直接輸入 exp/imp 即可執行。
exp system/manager@TEST FILE=d:\daochu.dmp FULL=Y LOG=exp_full.log
exp system/manager@TEST FILE=d:\daochu.dmp OWNER=(SYSTEM,SYS) LOG=exp_sys.log
exp aichannel/aichannel@TESTDB2 FILE=d:\data\newsmgnt.dmp \
TABLES=(INNER_NOTIFY,NOTIFY_STAFF_RELAT) LOG=exp_tables.log
exp system/manager@TEST FILE=d:\daochu.dmp TABLES=(TABLE1) \
QUERY="WHERE FIELD1 LIKE '00%'" LOG=exp_query.log
QUERY 需雙引號包裹,單引號在內部使用。gzip daochu.dmp / 7z a daochu.7z daochu.dmp,壓縮比 80-90%,無資料庫負擔。COMPRESS=Y(預設)匯入時合併 Extents,不壓縮 DMP 檔案本身。不建議依賴 COMPRESS=Y,易導致大表匯入失敗(ORA-01658)。imp system/manager@TEST FILE=d:\daochu.dmp LOG=imp_full.log IGNORE=Y
imp aichannel/aichannel@HUST FULL=Y FILE=d:\data\newsmgnt.dmp IGNORE=Y LOG=imp_schema.log
imp system/manager@TEST FILE=d:\daochu.dmp TABLES=(TABLE1) LOG=imp_table1.log
exp system/xxx@PROD FULL=Y FILE=prod_20240115.dmp LOG=exp_prod.log BUFFER=64000000 COMPRESS=N STATISTICS=NONEimp system/xxx@TEST FULL=Y FILE=prod_20240115.dmp LOG=imp_test.log IGNORE=Y COMMIT=Y BUFFER=64000000 SKIP_UNUSABLE_INDEXES=Y STATISTICS=NONEDBMS_STATS.GATHER_SCHEMA_STATS。SELECT seq.NEXTVAL FROM DUAL 對齊 MAX(ID)。| 來源字符集 | 目標字符集 | 結果 | 備註 |
|---|---|---|---|
| ZHS16GBK | AL32UTF8 | ✅ 安全 | 超集轉換無損失 |
| AL32UTF8 | ZHS16GBK | ⚠️ 風險 | 可能截斷/替換字符 (EXP-00056) |
| WE8ISO8859P1 | AL32UTF8 | ✅ 安全 |
NLS_LANG 必須與目標庫字符集一致(或為來源字符集)。| 問題 | 解法 |
|---|---|
| ORA-01658: unable to create INITIAL extent | 表空間不足或 COMPRESS=Y 導致巨大 INITIAL;加 COMPRESS=N、擴充表空間 |
| IMP-00041: warnings 結束 | 檢查 .log 中的 ORA- 錯誤,通常為索引/約束失敗,事後手動補建 |
| 序列值歸零導致 PK 衝突 | 遷移後手動調整序列 ALTER SEQUENCE seq INCREMENT BY n; SELECT seq.NEXTVAL FROM DUAL; ALTER SEQUENCE seq INCREMENT BY 1; |
| DB Link 密碼遺失 | 遷移前導出 SELECT * FROM dba_db_links,遷移後重建 |
Exp/Imp 構建雙環境的核心公式:生產導出(COMPRESS=N/STATISTICS=NONE) → 二進位傳輸 → 測試前置(表空間/用戶/權限) → 測試導入(IGNORE=Y/COMMIT=Y/SKIP_UNUSABLE_INDEXES=Y) → 後置修復(統計/序列/DB Link/匿名化) → 驗收簽核。將此清單文檔化、腳本化,即可實現「一鍵刷新測試環境」的工程化目標。