核心原則
- Export 版本 ≤ 源/目標資料庫最低版本:導出工具版本不得高於源資料庫版本。
- Import 版本 = 目標資料庫版本:必須使用目標端原生 IMP。
- Dump 向上相容,不向下相容:高版本 Dump 無法用低版本 IMP 導入。
- 跨大版本需執行對應 `catexp*.sql`** 準備字典視圖。
相容性矩陣 (節錄關鍵版本)
導入至 Oracle 8.0.x 或更低版本
| 源版本 \ 目標 | 5.x | 6.x | 7.0-7.3 | 8.0.x |
| 5.x - 7.3 | EXP 同版本 | EXP 6.x | EXP 7.x | EXP 7.3.4 (需 `catexp7.sql`) |
| 8.0.x / 8.1.x | 不支援 | 不支援 | EXP 7.3.4 (`catexp7.sql`) | EXP 8.0.6 |
| 9.0.1 / 9.2.0 | 不支援 (僅 8.0.6 目標允許 8i EXP 從 9i 導出) |
| 10g | 不支援 |
導入至 Oracle 8.1.5 以上版本
| 源版本 \ 目標 | 8.1.5 | 8.1.6 | 8.1.7 | 9.0.1 | 9.2.0 | 10.1.0 | 10.2.0 |
| 7.x | EXP 7.x | EXP 7.x | EXP 7.x | EXP 7.x | EXP 7.x | EXP 7.x | EXP 7.x |
| 8.0.3 - 8.0.6 | EXP 同版本 | EXP 同版本 | EXP 8.0.6 | EXP 8.0.6 | EXP 8.0.6 | EXP 8.0.6 | EXP 8.0.6 |
| 8.1.5 | EXP 8.1.5 | EXP 8.1.5 | EXP 8.1.5 | EXP 8.1.5 | EXP 8.1.5 | EXP 8.1.5 | EXP 8.1.5 |
| 8.1.6 | 不支援 | EXP 8.1.6 | EXP 8.1.6 | EXP 8.1.6 | EXP 8.1.6 | EXP 8.1.6 | EXP 8.1.6 |
| 8.1.7 | 不支援 | 不支援 | EXP 8.1.7 | EXP 8.1.7 | EXP 8.1.7 | EXP 8.1.7 | EXP 8.1.7 |
| 9.0.1 | 不支援 | 不支援 | EXP 8.1.7 | EXP 9.0.1 | EXP 9.0.1 | EXP 9.0.1 | EXP 9.0.1 |
| 9.2.0 | 不支援 | 不支援 | EXP 8.1.7 | EXP 9.0.1 | EXP 9.2.0 | EXP 9.2.0 | EXP 9.2.0 |
| 10.1.0 | 不支援 FULL=Y;建議用 Data Pump (expdp/impdp) 或 User/Table 模式 |
| 10.2.0 | 不支援 FULL=Y;需打補丁 10.2.0.4+,源至少 8.1.7.4 / 9.2.0.4 / 10.1.0.2 |
關鍵限制與規則
- FULL=Y 完整庫遷移限制:僅支援從「主要版本最終釋出版」(7.3.4, 8.0.6, 8.1.7, 9.0.1, 9.2.0) 直接遷移至下一主要版本。早期釋出版 (8.1.5, 8.1.6) 需先升級至終版再遷移。
- 補丁集版本一致性:同版本不同補丁集 (如 9.2.0.5 vs 9.2.0.1) 導出導入需使用 **較低補丁集版本的 EXP**,否則 `EXP-00008 ORA-00942` (字典視圖不匹配)。
- 字典視圖準備:
- 7 → 6: 源庫跑 `catexp6.sql`
- 8/8i → 7: 源庫跑 `catexp7.sql`
- 9i → 8i: **無需**跑腳本,直接用 8i EXP 導出 (但 `DIRECT=Y` 不支援 LOB/Object)。
- 10g → 9i/8i: 用 9i/8i EXP 導出,注意 10g 新特性 (子分區範本等) 可能不支援導出。
- Data Pump (expdp/impdp) 10g+:專有格式,**僅限同版本 Data Pump 客戶端讀取**;原版 EXP/IMP 仍保留以導入舊版 Dump。
- NLS_LANG 一致性**:導出導入端 `NLS_LANG` 必須與源資料庫字元集一致,否則資料損壞。
- 傳輸模式**:FTP 必須 `BINARY` 模式,ASCII 模式導致 `IMP-9/10` 錯誤。
典型遷移範例
| 遷移路徑 | EXP 版本 | IMP 版本 | 備註 |
| 7.3.3 → 8.1.6 | 7.3.3 | 8.1.6 | 標準升級 |
| 8.1.7 → 9.2.0 | 8.1.7 | 9.2.0 | 標準升級 |
| 9.0.1 → 8.1.7 | 8.1.7 | 8.1.7 | 降級:源庫跑 8i EXP |
| 8.1.7 → 7.3.4 | 7.3.4 | 7.3.4 | 源庫跑 `catexp7.sql` → 7.3.4 EXP |
| 10.1.0 → 8.1.7 | 8.1.7 | 8.1.7 | 源庫用 8i EXP (不支援 FULL=Y) |
| 10.1.0 → 10.1.0 | expdp | impdp | Data Pump 首選 |
| 9.2.0 → 7.3.4 | 不支援 (跨兩大版本) |
| 8.0.5 → 9.0.1 | 不支援 FULL=Y (8.0.5 非終版);用 User/Table 模式或先升 8.0.6 |
常見錯誤代碼對照
| 錯誤 | 原因 | 對策 |
| EXP-00024 / IMP-00023 | Export/Import Views 未安裝或版本錯誤 | SYS 跑 `catexp.sql` (對應版本) |
| EXP-00037 | EXP 版本高於資料庫版本 | 使用與資料庫相同版本的 EXP |
| IMP-00010 | 非有效 Dump 檔 (ASCII 傳輸或版本不符) | FTP BINARY 模式;確認版本相容 |
| IMP-00069 | 字元集轉換失敗 | 統一 NLS_LANG;避免字典衝突 |
| ORA-02248 | 10gR2 Dump 導入 10gR1 | 目標升級或用低版本 EXP 重導 |
最佳實踐清單
- 規劃遷移路徑時,查閱 Metalink **Note 132904.1** (Export/Import Compatibility) 確認支援性。
- 生產遷移前,**在測試環境完整演練** (含字典腳本、參數調整、應用驗證)。
- 大庫遷移:優先 **Data Pump 並行 + 網路模式** (無中間檔案) 或 **Transportable Tablespace** (元資料遷移 + 資料檔複製)。
- 導出加參數:`CONSISTENT=Y` (或 `FLASHBACK_SCN`)、`STATISTICS=NONE` (避免統計資訊導入失敗)、`BUFFER`/`RECORDLENGTH` 加大。
- 導入加參數:`COMMIT=Y`、`INDEXES=N` (後建索引)、`CONSTRAINTS=N` (後啟用)、`DISABLE_ARCHIVE_LOGGING` (減少 Redo)。
- 導入後必做:`ANALYZE`/`DBMS_STATS`、比對物件計數/行數/約束狀態、應用功能測試。
結語
Oracle EXP/IMP 雖為經典工具,其版本相容性規則極為嚴格。遵循「低版本導出、目標版本導入、字典視圖對齊、補丁集對齊、FULL 模式限制」五大鐵律,配合 Data Pump 現代化替代,才能確保跨版本遷移萬無一失。