工具鏈準備
- MySQL JDBC 驅動:
mysql-connector-java-5.1.xx.jar(或 8.x 版)
- Oracle SQL Developer:1.2 版或更新(內建遷移精靈)
環境配置步驟
- 註冊第三方 JDBC:
Tools → Preferences → Database → Third Party JDBC Drivers → Add Entry 選擇 MySQL jar
- 建立連線:
Connections → New Connection 分別建立 MySQL 與 Oracle 連線並測試
- 建立遷移倉儲:
Migration → Repository Management → Create Repository(儲存遷移中介模型)
兩種遷移模式
標準遷移(精細控制)
- Capture:
Migration → Capture Source Database 逆向抓取 MySQL 結構
- Convert:
Migration → Convert 將 MySQL 模型轉換為 Oracle 模型(型別映射、關鍵字處理)
- Generate DDL:
Migration → Generate Oracle DDL 產出建表腳本
- Run DDL:在 Oracle 端執行腳本建立 Schema
- Move Data:
Migration → Move Data 透過 JDBC 批次搬運資料
快速遷移(一鍵完成)
Migration → Quick Migrate
-- 選擇來源連線、目標連線、要遷移的表/庫,精靈自動完成上述 5 步驟
關鍵型別映射對照表
| MySQL | Oracle 建議映射 | 備註 |
| TINYINT | NUMBER(3) | |
| SMALLINT | NUMBER(5) | |
| MEDIUMINT | NUMBER(7) | |
| INT / INTEGER | NUMBER(10) | |
| BIGINT | NUMBER(19) | |
| FLOAT | BINARY_FLOAT | |
| DOUBLE | BINARY_DOUBLE | |
| DECIMAL(p,s) | NUMBER(p,s) | 精度完整保留 |
| CHAR(n) | CHAR(n) | |
| VARCHAR(n) | VARCHAR2(n) | Oracle 建議用 VARCHAR2 |
| TEXT / MEDIUMTEXT / LONGTEXT | CLOB | |
| BLOB / MEDIUMBLOB / LONGBLOB | BLOB | |
| DATE | DATE | |
| DATETIME | TIMESTAMP | Oracle DATE 含時間,但精度至秒 |
| TIMESTAMP | TIMESTAMP | |
| ENUM / SET | VARCHAR2 + CHECK CONSTRAINT | 需手工補充約束 |
| AUTO_INCREMENT | SEQUENCE + TRIGGER / IDENTITY (12c+) | 無直接對應 |
常見遷移坑與對策
| 問題 | 原因 | 對策 |
| 保留字衝突 | MySQL 允許 order、group 做識別符 | SQL Developer 自動加雙引號,建議統一重命名 |
| AUTO_INCREMENT 無對應 | Oracle 11g 無 Identity | 建立 SEQUENCE + BEFORE INSERT TRIGGER,或升級 12c 使用 GENERATED AS IDENTITY |
| ENUM/SET 型別遺失 | Oracle 無對應型別 | 轉為 VARCHAR2 + CHECK 约束 |
| 資料截斷 | VARCHAR 長度、字符集差異 | 遷移前統一字符集 AL32UTF8,檢查長度上限 |
| 大量資料移動緩慢 | JDBC 逐行 INSERT | 改用 Oracle SQL*Loader / Data Pump / 外部表 + 平行匯入 |
驗證清單
- ✅ 表數量、欄位數量、索引數量、外鍵數量一致
- ✅ 核心業務表資料筆數、抽樣內容一致
- ✅ 預存程序/函數/觸發器/視圖 邏輯等價(需人工重寫)
- ✅ 應用端連線字串、連線池、SQL 語法(LIMIT→ROWNUM/FETCH FIRST)已調整
結語
SQL Developer 遷移精靈適合「中小型、結構單純、停機窗口充裕」的 MySQL→Oracle 專案。大型核心系統建議採用 異構同步工具(Oracle GoldenGate、SharePlex、Attunity)實現「零停機、雙寫驗證、平滑切換」。無論工具,型別映射審核、資料校驗、應用改造 才是遷移成敗的關鍵。