本文介紹了Spring Batch:無法增加標(biāo)識(shí);嵌套異常是com.microsoft.sqlserver.jdbc.SQLServerException:無效對(duì)象名稱';BATCH_JOB_SEQ';?的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我們正在為Spring批處理應(yīng)用程序從Oracle DB遷移到Azure SQL Server。
嘗試執(zhí)行遷移到SQL Server后的作業(yè)時(shí)出現(xiàn)以下錯(cuò)誤
無法增加標(biāo)識(shí);嵌套異常為
com.microsoft.sqlserver.jdbc.SQLServerException:對(duì)象名稱無效
‘AppName.BATCH_JOB_SEQ’。
我確信SQL Server具有所需的序列
在作業(yè)存儲(chǔ)庫(kù)配置下面
<batch:job-repository id="jobRepository"
isolation-level-for-create="READ_COMMITTED"
table-prefix="MyApp.BATCH_"/>
下面是Oracle中提供的表格和序列
下面是Azure SQL中提供的表和序列
我正在使用以下版本
我是否應(yīng)該升級(jí)到
還是應(yīng)該按照https://github.com/spring-projects/spring-batch/blob/main/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-sqlserver.sql
重新創(chuàng)建表
推薦答案
該錯(cuò)誤可能與從Oracle遷移到Azure SQL Server有關(guān)。
如您在引擎蓋下的source code of the library中所見,當(dāng)generating the ids for jobs, job executions, and step executions時(shí),Spring批次使用不同的策略。
在Oracle案例中,他們使用sequences;對(duì)于SQL Server,他們使用tables with an identity column實(shí)現(xiàn)id生成。
遷移過程還復(fù)制了Spring Batch所需的不同Oracle序列,當(dāng)前述SQL Server ID生成策略嘗試獲取下一個(gè)值時(shí),很可能是它導(dǎo)致了問題。
請(qǐng)刪除遷移的序列,并使用適當(dāng)?shù)闹祫?chuàng)建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)
);
這篇關(guān)于Spring Batch:無法增加標(biāo)識(shí);嵌套異常是com.microsoft.sqlserver.jdbc.SQLServerException:無效對(duì)象名稱';BATCH_JOB_SEQ';?的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,