盡量保留應用程式碼,僅調整 DDL(建表/初始化腳本)。若初期設計考慮可移植性,遷移成本可近乎為零。
| # | 差異點 | Oracle 行為 | MySQL 行為 | 解決方案 |
|---|---|---|---|---|
| 1 | 大小寫敏感度 | 預設不區分,物件名轉大寫儲存 | Linux 下資料庫/表名區分大小寫(對應目錄/檔案) | 統一物件命名大小寫(建議全小寫),SQL 字串中表/欄位名與 DDL 完全一致 |
| 2 | 保留字 | 可作為物件名,無需轉義 | 不可直接用作表/欄位名 | 反引號 ` 包裹(如 `interval`),或加前綴 _(如 _interval) |
| 3 | 資料型態對應 | VARCHAR2、NUMBER | VARCHAR、NUMERIC/DECIMAL,無 TIME 型別 | 建立型態對照表,腳本批次替換 |
| 4 | 自動遞增 | SEQUENCE + Trigger | AUTO_INCREMENT 屬性 | 改用 AUTO_INCREMENT;複雜場景可建專用序號表模擬 |
| 5 | 索引長度限制 | 較寬鬆 | MyISAM/InnoDB 單索引最大 1000 bytes(UTF8 約 333 字元) | 縮減欄位長度、使用前綴索引、改用哈希索引 |
LIMIT,改用標準 OFFSET ... FETCH NEXT ...(12c+)或視圖包裝。SELECT seq.nextval FROM dual,封裝為通用 DAO 方法。\` 轉義勿直接寫在通用 SQL,交由 ORM/驅動處理。user_order、order_id)。UserOrder vs USER_ORDER)。t_、c_、idx_。
- 或統一加底線前綴:
_order、_group。
- 建立保留字檢查清單(MySQL、Oracle、PostgreSQL 合併版),Code Review 強制檢查。
三、 遷移實戰檢核清單
- 匯出 Oracle DDL → 文字編輯器批次替換型態/保留字/大小寫。
- 建立 MySQL 空資料庫 → 執行修正後 DDL。
- 資料遷移:
expdp/impdp、SQL*Loader、ETL 工具(Kettle、DataX)。
- 驗證:行數、Checksum、關鍵業務查詢結果對帳。
- 應用端切換:修改 DataSource、連線池、NLS_LANG 等配置。
- 壓測與觀測:慢查詢、鎖衝突、索引效能。
結語
Oracle → MySQL 遷移的核心挑戰不在工具,而在語義差異。提前建立「跨庫相容規範」,將差異消滅在設計階段,才是降低遷移成本的根本之道。
Windows 環境下使用 OraKill 強制終止失控 Oracle 執行緒
SQL Server、Oracle、DB2 三大資料庫性能與特性全方位比較
Red Hat Enterprise Linux 5 安裝 Oracle 9i Enterprise 完整實戰筆記 (含補丁、依賴包、參數調優)
Oracle 自主存取控制 (DAC) 系統表深度解析:SYSAUTH$、OBJAUTH$、權限模型與遞迴查詢
PL/SQL Developer 窗口列表移至左側:兩步配置優化開發佈局
Oracle 進階複製同步技術全解:架構、前提條件、雙向同步配置步驟
Oracle 入門心法:從定位到精通的完整學習路線圖
Copyright © 程式碼之家 All Rights Reserved