一个可以把Oracle转GoldenDB数据库的SKILL工具


name: oracle-to-goldendb-migration description: Migrate Java web projects from Oracle database to GoldenDB (国产化数据库). Handles JDBC driver replacement, SQL syntax conversion (sysdate, to_char, decode, rownum, sequences, dual), connection pool reconfiguration, and model/DAO layer adaptation. Use when migrating Oracle-based projects to GoldenDB or when performing database localization/国产化 tasks.


Oracle → GoldenDB 数据库迁移

概述

本 Skill 专门用于将基于 AICF 框架 + Struts 2 + DBCP 连接池的 Java Web 项目从 Oracle 数据库迁移到 GoldenDB(中兴分布式数据库,MySQL 协议兼容)。

迁移总览

完整的 Oracle → GoldenDB 迁移包含以下 7 个阶段:

迁移进度:
- [ ] 阶段 1:替换 JDBC 驱动 JAR 包
- [ ] 阶段 2:修改数据库连接配置(apps.properties)
- [ ] 阶段 3:修改硬编码 JDBC 连接代码
- [ ] 阶段 4:转换 Oracle 特有 SQL 函数/语法
- [ ] 阶段 5:处理序列/自增主键(func_sc_getseq)
- [ ] 阶段 6:修改连接池验证查询
- [ ] 阶段 7:模型层/DAO 适配调整

阶段 1:替换 JDBC 驱动 JAR 包

操作

  1. WEB-INF/lib/ 中移除 Oracle JDBC 驱动(通常名为 ojdbc*.jar

  2. 将 GoldenDB JDBC 驱动 JAR 放入 WEB-INF/lib/

GoldenDB JDBC 驱动获取

  • GoldenDB 通常兼容 MySQL 协议,可使用 MySQL Connector/J(mysql-connector-java-8.x.jar

  • 或使用中兴官方提供的 GoldenDB 专用 JDBC 驱动

阶段 2:修改数据库连接配置

修改前(Oracle):



修改后(GoldenDB / MySQL 协议):



GoldenDB 原生驱动(如有专用驱动):



:warning: 注意:具体驱动类名和 URL 格式请以 GoldenDB 官方文档为准。如果 GoldenDB 提供的是 MySQL 兼容模式,则使用 MySQL Connector/J 驱动即可。

阶段 3:修改硬编码 JDBC 连接

需要修改的文件清单:

修改模板:



阶段 4:转换 Oracle 特有 SQL 语法

详细的 SQL 对照表见 [sql-conversion-reference.md](file:/D:/Code/guizhou/admp_gz/admp/.qoder/skills/oracle-to-goldendb-migration/sql-conversion-reference.md)。

核心转换规则速查:

Oracle 语法 GoldenDB / MySQL 等价 影响文件数
sysdate NOW()CURRENT_TIMESTAMP 15+
to_char(date, 'yyyy-MM-dd') DATE_FORMAT(date, '%Y-%m-%d') 25+
to_date(str, 'yyyy-MM-dd hh24:mi:ss') STR_TO_DATE(str, '%Y-%m-%d %H:%i:%s') 25+
decode(expr, search, result, default) CASE WHEN expr = search THEN result ELSE default END 2-3
rownum < N LIMIT N 2
select 1 from dual SELECT 1 1
nvl(expr, default) IFNULL(expr, default)COALESCE(expr, default) 若干
trunc(date) DATE(date) 若干
`str1 \ \ str2`

日期格式映射对照:

Oracle 格式 MySQL/GoldenDB 格式
yyyy %Y
yy %y
MM %m
dd %d
hh24 %H
mi %i
ss %s
day %W
yyyymm %Y%m
yyyymmdd %Y%m%d
yyyy-MM-dd hh24:mi:ss %Y-%m-%d %H:%i:%s

文件级修改示例:

// 修改前
sql = "select to_char(sysdate, 'day') xinqi,"
    + " to_char(sysdate + 1, 'yyyymm') nextdayM,"
    + " to_char(sysdate, 'yyyymm') todayM"
    + " from dual";

// 修改后
sql = "select DATE_FORMAT(NOW(), '%W') xinqi,"
    + " DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 1 DAY), '%Y%m') nextdayM,"
    + " DATE_FORMAT(NOW(), '%Y%m') todayM";

// 修改前
" decode(aa.flag, '未超时', aa.num, 0) type1,"
+ " decode(aa.flag, '超时', aa.num, 0) type2"

// 修改后
" CASE WHEN aa.flag = '未超时' THEN aa.num ELSE 0 END type1,"
+ " CASE WHEN aa.flag = '超时' THEN aa.num ELSE 0 END type2"

sysdateNOW()

// 修改前: "when j.finish_date > sysdate"
// 修改后: "when j.finish_date > NOW()"

阶段 5:处理序列/自增主键

当前 Oracle 序列模式

项目中使用了自定义函数 func_sc_getseq('表名') 来获取序列值,分布在以下文件:

文件 行号 表名
EvalUtils.java 81 sm_cosmic_inte_eval_logs
BusiSMSContextCheckAction.java 120 sm_active_log
DemaActiveLogAction.java 50 sm_active_log
GroupBackBusinessAction.java 1095 sm_group_logs
GroupBusinessAction.java 1287 sm_group_logs
PanZhouBusinessAction.java 492 sm_panzhou_log
FPADMPAnasToDevelopImpl.java 885 sm_active_log
SPBeanBuilder.java 189, 205 SP_BEAN, SP_BEAN_FIELD

GoldenDB 自增主键策略

方案 A(推荐):数据库层面使用 AUTO_INCREMENT

方案 B:Java 层面生成 ID(UUID 或雪花算法)

如果不想改表结构,可以在 Java 层生成唯一 ID:

// 修改前
// values(func_sc_getseq('sm_active_log'), ...)

// 修改后(使用雪花算法)
import cn.hutool.core.util.IdUtil;
String id = IdUtil.getSnowflakeNextIdStr();
String sql = "insert into sm_active_log (id, job_id, ...) values('" + id + "', ...)";

阶段 6:修改连接池验证查询

文件src/apps.properties



阶段 7:模型层/DAO 适配调整

AICF 框架注意事项

本项目使用 AICF 自定义框架,Model 类继承 AICFAbstractTableBean。DAO 配置通过属性文件指定。需要检查

  1. 检查此 XML(位于 asiainfo-aicf-2.0.1.jar 内部)是否包含 Oracle 特有 SQL,如有则需通过覆盖方式适配。

  2. Model 类 不需要修改 Java 代码(因为通过 AICF 框架映射),但需要确保 GoldenDB 中表结构与 Model 字段对应(特别是数据类型映射)。

Oracle → GoldenDB 数据类型映射

Oracle 类型 GoldenDB/MySQL 类型
NUMBER BIGINT / DECIMAL / INT
VARCHAR2(n) VARCHAR(n)
CLOB LONGTEXTTEXT
DATE DATETIMETIMESTAMP
BLOB LONGBLOB
CHAR(n) CHAR(n)
LONG LONGTEXT

迁移后验证

完成迁移后,执行以下验证:

  • 应用启动无 JDBC 驱动加载异常

  • 数据库连接池正常初始化

  • 登录功能正常

  • 核心列表页面数据能正常展示

  • 日期查询、排序功能正常

  • 数据新增(INSERT)功能正常,ID 自增正确

  • 数据更新(UPDATE)功能正常

  • 附件上传/下载功能正常

  • 定时任务(Quartz)连接正常

  • 报表统计 SQL 结果正确

附加资源

  • 完整 SQL 转换对照:见 [sql-conversion-reference.md](file:/D:/Code/guizhou/admp_gz/admp/.qoder/skills/oracle-to-goldendb-migration/sql-conversion-reference.md)

  • 迁移检查清单:见 [migration-checklist.md](file:/D:/Code/guizhou/admp_gz/admp/.qoder/skills/oracle-to-goldendb-migration/migration-checklist.md)

1 个赞

你发了两遍吗