ODC 升级4.4.1报错

【 使用环境 】r 测试环境
【 OB or 其他组件 】 ODC
【 使用版本 】4.4.0->4.4.1
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】
[2025-12-25 17:22:16.096 GMT+08:00][main][,][ERROR][com.oceanbase.odc.migrate.jdbc.common.V44120FlowInstanceMigrate][213]: Error processing batch
org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [UPDATE flow_instance fi
INNER JOIN fi_migrate_temp t ON fi.id = t.id
SET fi.database_names = t.database_names,
fi.datasource_names = t.datasource_names,
fi.cluster_names = t.cluster_names,
fi.tenant_names = t.tenant_names
]
at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:103) ~[spring-jdbc-6.2.7.jar!/:6.2.7]
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:107) ~[spring-jdbc-6.2.7.jar!/:6.2.7]
at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1556) ~[spring-jdbc-6.2.7.jar!/:6.2.7]
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:408) ~[spring-jdbc-6.2.7.jar!/:6.2.7]
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:444) ~[spring-jdbc-6.2.7.jar!/:6.2.7]
at com.oceanbase.odc.migrate.jdbc.common.V44120FlowInstanceMigrate.batchUpdate(V44120FlowInstanceMigrate.java:501) ~[odc-migrate-4.4.1-20251210.jar!/:?]
at com.oceanbase.odc.migrate.jdbc.common.V44120FlowInstanceMigrate.processBatch(V44120FlowInstanceMigrate.java:208) ~[odc-migrate-4.4.1-20251210.jar!/:?]
at com.oceanbase.odc.migrate.jdbc.common.V44120FlowInstanceMigrate.migrate(V44120FlowInstanceMigrate.java:114) ~[odc-migrate-4.4.1-20251210.jar!/:?]
at com.oceanbase.odc.core.migrate.JdbcMigrator.doMigrate(JdbcMigrator.java:90) ~[odc-core-4.4.1-20251210.jar!/:?]
at com.oceanbase.odc.core.migrate.Migrates.migrate(Migrates.java:241) ~[odc-core-4.4.1-20251210.jar!/:?]
at com.oceanbase.odc.core.migrate.Migrates.migrate(Migrates.java:104) ~[odc-core-4.4.1-20251210.jar!/:?]
at com.oceanbase.odc.migrate.AbstractMigrate.doMigrate(AbstractMigrate.java:48) ~[odc-migrate-4.4.1-20251210.jar!/:?]
at com.oceanbase.odc.migrate.AbstractMetaDBMigrate.migrate(AbstractMetaDBMigrate.java:56) ~[odc-migrate-4.4.1-20251210.jar!/:?]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:?]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:?]
at java.base/java.lang.reflect.Method.invoke(Unknown Source) ~[?:?]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMethod.invoke(InitDestroyAnnotationBeanPostProcessor.java:457) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:401) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:219) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:429) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1818) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:607) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:373) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1682) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1628) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:913) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:240) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1395) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1232) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:569) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:373) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:413) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1375) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1205) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:569) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339) ~[spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:373) [spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337) [spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:207) [spring-beans-6.2.7.jar!/:6.2.7]
at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:265) [spring-context-6.2.7.jar!/:6.2.7]
at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:808) [spring-context-6.2.7.jar!/:6.2.7]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:611) [spring-context-6.2.7.jar!/:6.2.7]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) [spring-boot-3.4.3.jar!/:3.4.3]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752) [spring-boot-3.4.3.jar!/:3.4.3]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) [spring-boot-3.4.3.jar!/:3.4.3]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) [spring-boot-3.4.3.jar!/:3.4.3]
at com.oceanbase.odc.server.PluginSpringApplication.run(PluginSpringApplication.java:47) [!/:?]
at com.oceanbase.odc.server.PluginSpringApplication.run(PluginSpringApplication.java:43) [!/:?]
at com.oceanbase.odc.server.OdcServer.main(OdcServer.java:86) [!/:?]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:?]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:?]
at java.base/java.lang.reflect.Method.invoke(Unknown Source) ~[?:?]
at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:102) [odc.jar:?]
at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:64) [odc.jar:?]
at org.springframework.boot.loader.launch.PropertiesLauncher.main(PropertiesLauncher.java:580) [odc.jar:?]
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement “UPDATE flow_instance fi\000a[*]INNER JOIN fi_migrate_temp t ON fi.id = t.id\000aSET fi.database_names = t.database_names,\000a fi.datasource_names = t.datasource_names,\000a fi.cluster_names = t.cluster_names,\000a fi.tenant_names = t.tenant_names\000a”; expected “SET”; SQL statement:
UPDATE flow_instance fi
INNER JOIN fi_migrate_temp t ON fi.id = t.id
SET fi.database_names = t.database_names,
fi.datasource_names = t.datasource_names,
fi.cluster_names = t.cluster_names,
fi.tenant_names = t.tenant_names
[42001-232]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) ~[h2-2.3.232.jar!/:2.3.232]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) ~[h2-2.3.232.jar!/:2.3.232]
at org.h2.message.DbException.getSyntaxError(DbException.java:261) ~[h2-2.3.232.jar!/:2.3.232]
at org.h2.command.ParserBase.getSyntaxError(ParserBase.java:762) ~[h2-2.3.232.jar!/:2.3.232]
at org.h2.command.ParserBase.read(ParserBase.java:369) ~[h2-2.3.232.jar!/:2.3.232]
at org.h2.command.Parser.readUpdateSetClause(Parser.java:1037) ~[h2-2.3.232.jar!/:2.3.232]
at org.h2.command.Parser.parseUpdate(Parser.java:1003) ~[h2-2.3.232.jar!/:2.3.232]
at org.h2.command.Parser.parsePrepared(Parser.java:744) ~[h2-2.3.232.jar!/:2.3.232]
at org.h2.command.Parser.parse(Parser.java:581) ~[h2-2.3.232.jar!/:2.3.232]
at org.h2.command.Parser.parse(Parser.java:561) ~[h2-2.3.232.jar!/:2.3.232]
at org.h2.command.Parser.prepareCommand(Parser.java:484) ~[h2-2.3.232.jar!/:2.3.232]
at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:645) ~[h2-2.3.232.jar!/:2.3.232]
at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:561) ~[h2-2.3.232.jar!/:2.3.232]
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1164) ~[h2-2.3.232.jar!/:2.3.232]
at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:245) ~[h2-2.3.232.jar!/:2.3.232]
at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:231) ~[h2-2.3.232.jar!/:2.3.232]
at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:94) ~[HikariCP-5.0.1.jar!/:?]
at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java) ~[HikariCP-5.0.1.jar!/:?]
at org.springframework.jdbc.core.JdbcTemplate$1ExecuteStatementCallback.doInStatement(JdbcTemplate.java:435) ~[spring-jdbc-6.2.7.jar!/:6.2.7]
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:393) ~[spring-jdbc-6.2.7.jar!/:6.2.7]
… 63 more
[2025-12-25 17:22:16.111 GMT+08:00][main][,][ERROR][com.oceanbase.odc.migrate.jdbc.common.V44120FlowInstanceMigrate][122]: Flow instance migration failed:
org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [UPDATE flow_instance fi
INNER JOIN fi_migrate_temp t ON fi.id = t.id
SET fi.database_names = t.database_names,
fi.datasource_names = t.datasource_names,
fi.cluster_names = t.cluster_names,
fi.tenant_names = t.tenant_names
]

2 个赞

具体怎么做的升级 odc是web还是桌面版的

桌面版,官网下载新版本,直接覆盖安装的

还没用过ODC,学习一下

感谢分享

希望协助解决,每天ODC用的很多,或者现在卸载重装,我的连接信息还在吗,备份在哪里

日志文件发一下
windows 系统日志路径:%USERPROFILE%\AppData\Roaming\odc\logs\ 下的 serverclient 子目录,这里 %USERPROFILE% 通常是 C:\Users\{username}\

mac 系统日志路径:~/Library/Application Support/odc/logs/ 下的 serverclient 子目录,这里 ~ 通常是 /Users/{username}

client-server.zip (2.4 MB)
多谢

4.3到4.4.1,桌面版升级也是不行的,会报错。

版本不匹配会导致数据类型不匹配的问题吗

看着是启动报错了

:sweat_smile: 有进展吗,定位到问题了吗

还在分析 你稍等呀 有结果了 同步给你

h2-2.3.232.jar.zip (2.4 MB)

1、下载H2的jar包(h2-2.3.232.jar)
2、找到H2的db文件目录:

windows 系统数据文件路径 %USERPROFILE%\AppData\Roaming\odc
cd %USERPROFILE%\AppData\Roaming\odc
mac 系统数据文件路径 /Users/{user}/Library/Application Support/odc
cd ~/“Library/Application Support/odc”
ls odc*.db
3、找到odc4.0这个数据文件
4、在下载的h2-2.3.232.jar的目录下执行命令,注意-url后面的地址需要填写为步骤2中找到的odc4.0这个数据文件的地址,然后可以打开H2的控制台
java -cp ./h2-2.3.232.jar
org.h2.tools.Shell
-url “jdbc:h2:file:~/Library/Application Support/odc/odc4.0;MODE=MySQL;NON_KEYWORDS=KEY,VALUE”
-user sa
-password “”
5、执行sql语句,跳过迁移脚本执行
update MIGRATE_SCHEMA_HISTORY set SUCCESS = 1 where VERSION = ‘4.4.1.20’ and SUCCESS = 0 limit 1;
6、关闭终端,重启ODC

441中有一段脚本的迁移未适配H2,导致迁移失败;

按照上面的处理步骤 处理一下 注意转译字符

好的 我来验证看看

你这执行的命令有问题吧 你这个双引号里面还有一层引号,另外使用文件也不应该带上.mv.db,直接用odc4.0就可以了

多谢,已经成功了
image