首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle Exp/Imp 邏輯備份遷移實戰:從基礎指令到跨庫構建雙環境

     編輯:Oracle 資料庫基礎

前言:Exp/Ip 是構建雙環境的經典捷徑

利用 exp 將資料導出為 DMP 檔,再用 imp 導入另一資料庫,可快速構建「測試庫=生產庫」的雙環境架構。本文涵蓋執行環境選擇、導出/導入核心指令範本、壓縮策略、字符集與版本相容性、跨庫雙環境建構清單。

一、執行環境選擇

  • SQL*Plus 內呼叫:HOST exp ... 或 $ exp ...(需啟用 SHELL 權限)。
  • 作業系統命令列 (CMD/Shell):最常用、最穩定、支援腳本自動化。
  • 客戶端工具:Toad、PL/SQL Developer、DBeaver 內建 Exp/Imp 精靈(底層仍呼叫可執行檔)。

路徑機制:Oracle 安裝目錄 %ORACLE_HOME%\bin (Windows) 或 $ORACLE_HOME/bin (Linux) 已在 PATH 中,直接輸入 exp/imp 即可執行。

二、導出核心指令範本

1. 全庫導出(需 EXP_FULL_DATABASE)

exp system/manager@TEST FILE=d:\daochu.dmp FULL=Y LOG=exp_full.log

2. Schema 級導出(多 Schema)

exp system/manager@TEST FILE=d:\daochu.dmp OWNER=(SYSTEM,SYS) LOG=exp_sys.log

3. 表級導出(指定表)

exp aichannel/aichannel@TESTDB2 FILE=d:\data\newsmgnt.dmp \
TABLES=(INNER_NOTIFY,NOTIFY_STAFF_RELAT) LOG=exp_tables.log

4. 條件導出(QUERY 參數)

exp system/manager@TEST FILE=d:\daochu.dmp TABLES=(TABLE1) \
QUERY="WHERE FIELD1 LIKE '00%'" LOG=exp_query.log
  • QUERY 需雙引號包裹,單引號在內部使用。
  • 適用於歷史資料分片導出、測試資料子集製造。

5. 壓縮策略

  • 作業系統層:gzip daochu.dmp / 7z a daochu.7z daochu.dmp,壓縮比 80-90%,無資料庫負擔。
  • 資料庫層:COMPRESS=Y(預設)匯入時合併 Extents,不壓縮 DMP 檔案本身。不建議依賴 COMPRESS=Y,易導致大表匯入失敗(ORA-01658)。

三、導入核心指令範本

1. 全庫導入

imp system/manager@TEST FILE=d:\daochu.dmp LOG=imp_full.log IGNORE=Y

2. Schema 級導入(含重映射)

imp aichannel/aichannel@HUST FULL=Y FILE=d:\data\newsmgnt.dmp IGNORE=Y LOG=imp_schema.log

3. 表級導入

imp system/manager@TEST FILE=d:\daochu.dmp TABLES=(TABLE1) LOG=imp_table1.log

四、構建雙環境(測試=生產)完整清單

  1. 生產端導出:exp system/xxx@PROD FULL=Y FILE=prod_20240115.dmp LOG=exp_prod.log BUFFER=64000000 COMPRESS=N STATISTICS=NONE
  2. 傳輸 DMP:二進位模式 (FTP BINARY / SCP) 複製至測試主機。
  3. 測試端前置:
    • 建立同名表空間(路徑可異,大小 ≥ 生產)。
    • 建立同名用戶、配額、權限。
    • 關閉應用連線、停用排程 Job。
  4. 測試端導入:imp system/xxx@TEST FULL=Y FILE=prod_20240115.dmp LOG=imp_test.log IGNORE=Y COMMIT=Y BUFFER=64000000 SKIP_UNUSABLE_INDEXES=Y STATISTICS=NONE
  5. 導入後處理:
    • 重建失效索引/約束/觸發器。
    • 收集統計資訊 DBMS_STATS.GATHER_SCHEMA_STATS。
    • 同步序列值 SELECT seq.NEXTVAL FROM DUAL 對齊 MAX(ID)。
    • 重建 DB Link、Directory 物件、排程 Job。
    • 修改測試專用配置(關閉外部介面、匿名化敏感欄位)。
  6. 驗收:核對核心表行數、關鍵欄位 MIN/MAX、物件數量、應用煙霧測試。

五、字符集與版本相容性鐵律

來源字符集目標字符集結果備註
ZHS16GBKAL32UTF8✅ 安全超集轉換無損失
AL32UTF8ZHS16GBK⚠️ 風險可能截斷/替換字符 (EXP-00056)
WE8ISO8859P1AL32UTF8✅ 安全
  • 客戶端 NLS_LANG 必須與目標庫字符集一致(或為來源字符集)。
  • Exp 版本 ≤ Imp 版本(向上相容)。

六、常見問題速查

問題解法
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/匿名化) → 驗收簽核。將此清單文檔化、腳本化,即可實現「一鍵刷新測試環境」的工程化目標。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved