【 使用环境 】测试环境
【 OB or 其他组件 】OceanBase_CE + Flyway
【 使用版本 】5.7.25-OceanBase_CE-v4.2.1.8
【问题描述】
1、按照官方文档集成失败。出现FUNCTION RELEASE_LOCK does not exist这种错误
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002940686
2、由于使用的jdk是1.8版本,所以下降相关版本,pom如下:
org.flywaydb
flyway-core
<!-- 替换为 9.22.3(JDK 8 兼容的最新版本) -->
<version>9.22.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-database-oceanbase</artifactId>
<!-- 9.22.3 是 Flyway 9.x 最后版本,适配 JDK 8 -->
<version>9.22.3</version>
</dependency>
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手 ] 即可召唤小助手,欢迎试用!
论坛小助手
2025 年12 月 11 日 18:11
#3
根据您的描述,Flyway 在集成 OceanBase CE 版本 5.7.25-OceanBase_CE-v4.2.1.8 时遇到了 FUNCTION RELEASE_LOCK does not exist 的错误。这可能是因为某些 MySQL 兼容的函数在 OceanBase 中还没有完全支持,或者是在特定版本中尚未实现。对于此类问题,通常我们需要先收集更多的诊断信息来确定具体的原因。
推荐操作:
日志采集 :为了进一步分析该问题,建议使用 obdiag 工具收集与 SQL 执行相关的日志信息。
日志采集场景 : SQL 执行出错
日志采集命令 :
obdiag gather scene run --scene=observer.sql_err --env "{db_connect='-h127.0.0.1 -P2881 -utest@test -p****** -Dtest', trace_id='Yxx'}"
注意 :请替换命令中的 -h127.0.0.1 -P2881 -utest@test -p****** -Dtest 为您实际的数据库连接信息,并将 trace_id 替换为实际的事务追踪ID或保持默认值以收集尽可能多的相关日志。
问题补充 :为了更有效地帮助您解决问题,请回答以下问题:
您使用的 Flyway 版本是什么?
能否提供完整的错误堆栈信息?
您尝试执行的具体 SQL 语句是什么?
在遇到这个问题之前,是否有进行过任何配置更改或数据库结构的修改?
您是否尝试过直接在 OceanBase 上执行 RELEASE_LOCK 函数,其结果如何?
以上信息将有助于我们更准确地定位问题并提供解决方案。感谢您的配合!
附上敏捷诊断工具 obdiag 使用帮助链接
冉雨
2025 年12 月 12 日 10:37
#4
flyway 9.x没有不支持oceanbase,如果使用mysql驱动会被识别为mysql数据库,但是具体细节上有差异,oceanbase的插件包下载地址如下https://mvnrepository.com/artifact/org.flywaydb/flyway-database-oceanbase,不支持jdk1.8,具体原因是https://github.com/flyway/flyway-community-db-support,官方提供了一个插件库不再接收直接集成,而这个插件库也是从10.0.1开始支持的,未提供历史代码,无法修改历史代码进行集成
冉雨
2025 年12 月 12 日 11:01
#5
从报错看不支持这个函数,可以使用以下sql测试
– 获取锁(名称为 “my_lock”,等待 10 秒)
SELECT GET_LOCK(‘my_lock’, 10);
– 释放锁
SELECT RELEASE_LOCK(‘my_lock’);
测试ob 4.2.1.x不支持上述sql,4.2.5.x及以上支持上述sql