# OceanBase for MySQL数据库项目化适配

项目化支持,意味着可能存在项目化适配成本,可能存在缺陷,并且后续产生的BUG可能需要额外项目化成本解决

OceanBase数据分为MySQL和Oracle两种模式,两种兼容模式适配如下:

# MySQL模式适配

由于OceanBase数据库的MySQL模式可用MySQL官方JDBC驱动连接,故理论不存在修改代码适配工作量,只需按官方文档基于MySQL连接即可。

# 如果使用Tomcat中间件,适配方式如下:

  • 按照OceanBase数据库手册安装部署OceanBase for MySQL服务
  • 初始化OA的MySQL数据库版本:可以通过OA安装程序选择MySQL数据库脚本(安装程序中数据库可选择MySQL,URL可配置成OceanBase for MySQL的地址)
  • 找到base/conf文件夹下的datasourceCtp.properties配置文件
  • 修改db.hibernateDialec的值为org.hibernate.dialect.MySQLDialect(如果OA是基于MySQL安装,此步可能不需要)
  • 修改workflow.dialect的值为MYSQL(如果OA是基于MySQL安装,此步可能不需要)
  • 修改ctpDataSource.driverClassName的值为com.mysql.jdbc.Driver(如果OA是基于MySQL安装,此步可能不需要)
  • 修改ctpDataSource.url的值为 jdbc:mysql://数据IP:数据库端口/数据库名称 (注意这里的IP端口一定要对应OceanBase for MySQL的地址)
  • 填写正确的数据库名称和密码(这里一定是OceanBase for MySQL的数据库名称和密码)
  • 正常启动系统即可

# 如果使用国产中间件(如东方通、金蝶、宝兰德等),适配方式如下:

1、 按照OceanBase数据库手册安装部署OceanBase for MySQL服务

2、 初始化OA的数据库:可以信创安装包解压获取到初始化sql文件,直接在OceanBase数据库中执行sql脚本;(信创部署包中文件所在位置参考:2.V9.0_XinChuang/deploytools/file/sql/init/A8N-2/MySQL/A8N-2_ALL_IN_ONE_MYSQL.SQL )注意区分不同产品线和版本。

常见异常: 导入时可能会遇到创建索引报错,如果遇到create desc index not supported的错误提示,就表示OceanBase不支持DESC逆序索引,需要去掉CREATE INDEX语句中的DESC关键字再继续执行。

参考资料:https://developer.aliyun.com/ask/543460

-- 替换前不可执行示例:
CREATE INDEX IDX_BBS_ARTI_STA_ISSTIM ON BBS_ARTICLE (V3X_BBS_BOARD_ID,TOP_SEQUENCE DESC,ISSUE_TIME DESC,STATE);
CREATE INDEX IDX_CTP_AFFAIR_PLIST ON CTP_AFFAIR (PROXY_MEMBER_ID,STATE,COMPLETE_TIME DESC,APP,SUB_APP,IS_DELETE,ID);

-- 替换后可执行示例:
CREATE INDEX IDX_BBS_ARTI_STA_ISSTIM ON BBS_ARTICLE (V3X_BBS_BOARD_ID,TOP_SEQUENCE,ISSUE_TIME,STATE);
CREATE INDEX IDX_CTP_AFFAIR_PLIST ON CTP_AFFAIR (PROXY_MEMBER_ID,STATE,COMPLETE_TIME,APP,SUB_APP,IS_DELETE,ID);

3、 参考对应OA版本的信创部署手册,使用信创部署工具部署应用,信创工具部署时数据库选择其他即可

在中间件jvm参数配置需要增加驱动代理参数:-Djdbcproxydriver.driverclass=com.mysql.jdbc.Driver

# mysql 5.*和mysql8.*系列都用同一个驱动类:
com.mysql.jdbc.Driver

4、找到中间件的lib,将数据库驱动jar(可以使用mysql-connector-java-5.1.49.jar)放入中间件lib下

5、中间件下配置数据源连接:

  • 名称:jdbc/ctpDataSource
  • 数据库驱动类名:使用致远的com.seeyon.ctp.monitor.perf.jdbcmonitor.proxyobj.JMProxyDriver,如果不生效再使用MySQL自己的com.mysql.jdbc.Driver
  • 数据库连接URL:按厂商提供的URL录入
  • 数据库驱动jar包地址:可以使用mysql-connector-java-5.1.49.jar
  • 数据库帐号密码:按厂商提供的录入,尤其注意OceanBase是三段式用户名

注:这里驱动类名设置为com.seeyon.ctp.monitor.perf.jdbcmonitor.proxyobj.JMProxyDriver表示使用致远的驱动代理,使用这个代理可以针对某些数据库做一些个性化转化,更加稳定

6、 测试连接正常后再启动OA验证功能

注意:以上为全新初始化数据库安装部署,如果是其他数据库转库到OceanBase for MySQL,则不需要执行初始化脚本,直接从第三步开始参考操作即可。

1724297527542.png

# 常见问题

如果数据库连接一切都是按照本手册配置的,还连不上数据库,不妨确认下那台中间件是否开通了访问数据库地址和端口的权限,此前有项目遇到忘记开放网络策略导致排查半天无果。

编撰人:ranjf、het、shenlq