| # | MySQL | Oracle | 遷移對策 |
|---|---|---|---|
| 1 | LIMIT n | 無,用 ROWNUM / OFFSET ... FETCH (12c+) | 改寫分頁查詢 |
| 2 | OFFSET | 無原生語法 | 子查詢 + ROWNUM |
| 3 | 復制較簡單 | Data Guard/GoldenGate/Streams,配置複雜 | 預留架構調研時間 |
| 4 | 分區表免費 | Enterprise Edition 才內置分區 | 預算評估 |
| 5 | INSERT ... ON DUPLICATE KEY UPDATE | MERGE (標準 SQL,語法更複雜) | 批量重寫 UPSERT |
| 6 | root 超級用戶 | Role/Schema 權限體系,SYS 近似 root 但不建議日常用 | 重設計權限模型 |
| 7 | 自增列 AUTO_INCREMENT | Sequence + Trigger 實現 | 統一序列管理 |
| 8 | SHOW TABLES 等 | 查 USER_TABLES / ALL_TAB_COLUMNS 等數據字典 | 熟悉字典視圖 |
| 9 | 數值類型細粒度 | NUMBER(p,s) 統一,精度自定 | 類型映射表 |
| 10 | ALTER TABLE ADD COL AFTER | 不支持指定列位置 | 調整應用不依賴列順序 |
| 11 | 寬鬆數據校驗('0000-00-00' 合法) | 嚴格校驗,拒絕非法日期 | 清洗歷史髒數據 |
| 12 | 存儲過程標準 PSM | PL/SQL 專有,功能更強但非標準 | 重寫所有存儲過程 |
| 13 | ENUM 類型 | 無,用 CHECK 约束或關聯表 | 重構字典表 |
| 14 | GROUP BY 允許非聚合列 | 強制所有非聚合列出現在 GROUP BY | 開啟 ONLY_FULL_GROUP_BY 習慣 |
| 15 | mysqldump 文本可編輯 | exp/imp 二進制 dmp 不可手改 | 改用 Data Pump (expdp/impdp) |
| 16 | 連接輕量 | 連接昂貴,必須連接池 | 配置 HikariCP/Druid |
| 17 | Prepared Statement 可選 | 必須綁定變量,否則硬解析拖垮性能 | 全鏈路強制綁定 |
| 18 | 游標自動關閉 | 必須顯式 CLOSE,否則 ORA-01000 | 代碼審查強制關閉 |
| 19 | 無快照過老 | 關注 ORA-01555,調整 Undo 表空間/Retention | 監控 Undo 使用率 |
| 20 | 臨時表會話級自建自銷毀 | 全局臨時表定義持久化,數據會話隔離 | 調整 DDL 部署流程 |
DBMS_STATS) 是常態工作;DBMS_LOB 包,性能敏感;LISTAGG (11gR2+) 替代 GROUP_CONCAT;DBMS_SESSION.SET_CONTEXT / 分析函數替代 @var。SQL Developer / GoldenGate / ETL);(本文綜合整理自 Robert Treat、Baron Schwartz 等專家列表,針對 MySQL 開發者視角提煉)