Spring Batch:无法增加标识;嵌套异常是com.microsoft.sqlserver.jdbc.SQLServerException:无效对象名称'BATCH_JOB_SEQ'? [英] Spring Batch: Could not increment identity; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'BATCH_JOB_SEQ'?

查看:48
本文介绍了Spring Batch:无法增加标识;嵌套异常是com.microsoft.sqlserver.jdbc.SQLServerException:无效对象名称'BATCH_JOB_SEQ'?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们正在为Spring批处理应用程序从Oracle DB迁移到Azure SQL Server。

尝试执行迁移到SQL Server后的作业时出现以下错误

无法增加标识;嵌套异常为 com.microsoft.sqlserver.jdbc.SQLServerException:对象名称无效 ‘AppName.BATCH_JOB_SEQ’。

我确信SQL Server具有所需的序列

在作业存储库配置下面

<batch:job-repository id="jobRepository"
 isolation-level-for-create="READ_COMMITTED"
 table-prefix="MyApp.BATCH_"/>

下面是Oracle中提供的表格和序列

下面是Azure SQL中提供的表和序列

我正在使用以下版本

我是否应该升级到

还是应该按照https://github.com/spring-projects/spring-batch/blob/main/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-sqlserver.sql

重新创建表

推荐答案

该错误可能与从Oracle迁移到Azure SQL Server有关。

如您在引擎盖下的source code of the library中所见,当generating the ids for jobs, job executions, and step executions时,Spring批次使用不同的策略。

在Oracle案例中,他们使用sequences;对于SQL Server,他们使用tables with an identity column实现id生成。

迁移过程还复制了Spring Batch所需的不同Oracle序列,当前述SQL Server ID生成策略尝试获取下一个值时,很可能是它导致了问题。

请删除迁移的序列,并使用适当的值创建SQL Server所需的three tables

CREATE TABLE BATCH_STEP_EXECUTION_SEQ (
  ID BIGINT IDENTITY(<last analogous Oracle sequence value>, 1)
);

CREATE TABLE BATCH_JOB_EXECUTION_SEQ (
  ID BIGINT IDENTITY(<last analogous Oracle sequence value>, 1)
);

CREATE TABLE BATCH_JOB_SEQ (
  ID BIGINT IDENTITY(<last analogous Oracle sequence value>, 1)
);

这篇关于Spring Batch:无法增加标识;嵌套异常是com.microsoft.sqlserver.jdbc.SQLServerException:无效对象名称&#39;BATCH_JOB_SEQ&#39;?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆