Spring Batch:无法增加身份;嵌套异常是 com.microsoft.sqlserver.jdbc.SQLServerException:对象名称“BATCH_JOB_SEQ”无效?

Kar*_*mar 6 java sql-server oracle spring spring-batch

我们正在将 Spring Batch 应用程序从 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_"/>
Run Code Online (Sandbox Code Playgroud)

以下是 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

jcc*_*ero 6

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

正如您在库的源代码中看到的那样,Spring Batch 在生成作业、作业执行和步骤执行的 id时使用不同的策略。

在 Oracle 的例子中,他们使用序列;在 SQL Server 中,他们使用带有标识列的表实现了 id 生成。

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

请删除迁移的序列并使用适当的值创建 SQL Server 所需的三个表:

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)
);
Run Code Online (Sandbox Code Playgroud)