公司信创改造,Oracle 迁移是绕不开的坎。最近在金仓 KES 上做了 Oracle 和 SQL Server 的迁移适配测试,把几个关键维度的结果和踩到的坑记录下来,供参考。
迁移工具和 Oracle 兼容性概览
搞迁移最怕的就是工具不好用、语法不兼容。金仓、达梦、OceanBase 这三家我都跑过一遍,核心差异大致如下:
| 对比维度 | 金仓 KingbaseES | 达梦 | OceanBase |
|---|---|---|---|
| 迁移工具 | 内置 Migration Toolkit,图形化操作,结构/数据/存储过程全量迁移,成功率很高 | 提供 DTS 工具,基础迁移没问题,复杂存储过程常需手动改 | 基本靠第三方脚本,分布式架构下迁移复杂度高 |
| Oracle 语法兼容 | PL/SQL 兼容达 99%,自定义函数、存储过程、触发器等全支持 | 兼容约 85% 的 PL/SQL,部分动态 SQL 高级用法不支持 | 主要兼容 SQL 92 标准,PL/SQL 兼容性约 70%,改写量大 |
| 分布式适配 | 集中式与分布式均支持,可平滑扩展 | 以集中式为主,分布式能力还在完善 | 原生分布式,适合超大规模,但中小规模迁移成本高 |
| 性能表现 | TP 场景达 Oracle 的 95%,AP 场景也不错 | TP 场景约 85%,复杂查询需额外优化 | 分布式下性能突出,单节点弱,不适合单一架构 |
迁移的一般流程,工具会先做兼容性校验,再执行结构、数据迁移,最后做一致性检查。

工具上手步骤
以金仓 Migration Toolkit 为例,用起来还算简单:
部署
下载后解压,进 bin 目录:
cd KingbaseMigrationToolkit/bin
# Linux 需图形环境
./kmtool.sh
# Windows 直接执行 exe
kmtool.exe
源库连接 新建任务后填 Oracle 连接信息,驱动用 Oracle JDBC:
驱动类名:oracle.jdbc.driver.OracleDriver
连接 URL:jdbc:oracle:thin:@//192.168.1.100:1521/ORCL
用户名:sys as sysdba
密码:xxx
兼容性校验
点击'语法校验'会生成报告。比如遇到 NVL2,工具自动提示用 CASE WHEN 替换,一键就能改:
-- Oracle 不兼容写法
SELECT NVL2(col1, col2, col3) FROM t_table;
-- 金仓建议替换
SELECT CASE col1 col2 col3 t_table;



