Java 如何在SQL Server中截断Spring批处理作业表
我开发了Spring批处理作业,用于处理数十万个平面文件。这个程序长期运行正常。之后,批处理表的行数和作业的执行时间增加Java 如何在SQL Server中截断Spring批处理作业表,java,sql-server,spring-mvc,spring-batch,Java,Sql Server,Spring Mvc,Spring Batch,我开发了Spring批处理作业,用于处理数十万个平面文件。这个程序长期运行正常。之后,批处理表的行数和作业的执行时间增加 我试图截断这些表。我看到了,我应该取消一些禁用的限制。然后,我在最后截断了表,添加了以前删除的约束。此代码如下所示,与主程序(文件处理)同时工作 ALTER TABLE[dbo].[BATCH2\U STEP\U EXECUTION]drop CONSTRAINT[JOB2\U EXEC\U STEP\U FK] ALTER TABLE[dbo].[BATCH2_作业执行]
我试图截断这些表。我看到了,我应该取消一些禁用的限制。然后,我在最后截断了表,添加了以前删除的约束。此代码如下所示,与主程序(文件处理)同时工作
ALTER TABLE[dbo].[BATCH2\U STEP\U EXECUTION]drop CONSTRAINT[JOB2\U EXEC\U STEP\U FK]
ALTER TABLE[dbo].[BATCH2_作业执行]drop约束[JOB2_INST_EXEC_FK]
ALTER TABLE[dbo].[BATCH2_作业_执行_参数]drop约束[JOB2_执行_参数_FK]
ALTER TABLE[dbo].[BATCH2_作业_执行_上下文]drop约束[JOB2_执行_CTX_FK]
ALTER TABLE[dbo].[BATCH2_STEP_EXECUTION_CONTEXT]drop CONSTRAINT[STEP2_EXEC_CTX_FK]
截断表BATCH2\u作业\u执行\u参数
截断表BATCH2\u作业\u执行\u上下文
截断表BATCH2\u作业\u实例
截断表BATCH2\u作业\u执行
截断表BATCH2\u步骤\u执行
截断表BATCH2\u步骤\u执行\u上下文
使用CHECK ADD CONSTRAINT[JOB2_EXEC_PARAMS_FK]外键([JOB_EXECUTION_ID])更改表[dbo].[BATCH2_作业执行_参数]
引用[dbo]。[BATCH2\u作业执行]([JOB\u执行\u ID])
去
ALTER TABLE[dbo].[BATCH2_作业_执行_参数]检查约束[JOB2_执行_参数_FK]
去
使用CHECK ADD CONSTRAINT[JOB2\u EXEC\u CTX\u FK]外键([JOB\u EXECUTION\u ID])更改表[dbo].[BATCH2\u作业执行\u上下文]
引用[dbo]。[BATCH2\u作业执行]([JOB\u执行\u ID])
去
ALTER TABLE[dbo].[BATCH2_作业_执行_上下文]检查约束[JOB2_执行_CTX_FK]
去
使用CHECK ADD CONSTRAINT[JOB2_INST_EXEC_FK]外键([JOB_实例ID])更改表[dbo].[BATCH2_作业执行]
引用[dbo]。[BATCH2\u作业\u实例]([JOB\u实例\u ID])
去
ALTER TABLE[dbo].[BATCH2_作业执行]检查约束[JOB2_INST_EXEC_FK]
去
使用检查添加约束[JOB2\u EXEC\u STEP\u FK]外键([JOB\u EXECUTION\u ID])更改表[dbo]。[BATCH2\u STEP\u EXECUTION]
引用[dbo]。[BATCH2\u作业执行]([JOB\u执行\u ID])
去
ALTER TABLE[dbo].[BATCH2\U STEP\U EXECUTION]检查约束[JOB2\U EXEC\U STEP\U FK]
去
使用检查添加约束[STEP2_EXEC_CTX_FK]外键([STEP_EXECUTION_ID])更改表[dbo]。[BATCH2_STEP_EXECUTION_CONTEXT]
引用[dbo]。[BATCH2\u步骤执行]([STEP\u执行\u ID])
去
ALTER TABLE[dbo].[BATCH2\U STEP\U EXECUTION\U CONTEXT]检查约束[STEP2\U EXEC\U CTX\U FK]
去
有时候,我会犯这样的错误
Msg 3728, Level 16, State 1, Line 4
'JOB2_EXEC_STEP_FK' is not a constraint.
Msg 3727, Level 16, State 0, Line 4
Could not drop constraint. See previous errors.
Msg 2714, Level 16, State 5, Line 27
There is already an object named 'JOB2_EXEC_CTX_FK' in the database.
Msg 1750, Level 16, State 1, Line 27
Could not create constraint or index. See previous errors.
Msg 2714, Level 16, State 5, Line 35
There is already an object named 'JOB2_INST_EXEC_FK' in the database.
Msg 1750, Level 16, State 1, Line 35
Could not create constraint or index. See previous errors.
Msg 547, Level 16, State 0, Line 43
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "JOB2_EXEC_STEP_FK". The conflict occurred in database "db_name", table "dbo.BATCH2_JOB_EXECUTION", column 'JOB_EXECUTION_ID'.
Msg 4917, Level 16, State 0, Line 47
Constraint 'JOB2_EXEC_STEP_FK' does not exist.
Msg 4916, Level 16, State 0, Line 47
Could not enable or disable the constraint. See previous errors.
我如何解决这种情况?非常感谢。经过长时间的研究,我发现了一个干净的方法
spring.batch.initializeschema
属性,使其始终。然后重新启动服务器以自动创建spring批处理架构
“此代码如下所示,与主程序(文件处理)同时工作。”:如果在作业运行时截断表,则出现类似问题并不奇怪。您是否考虑过在没有作业运行时截断表?我认为是这样,但这些作业必须同时运行。也许我会检查隔离级别。谢谢你的回答。我认为这是最简单的方法。我会用的。非常感谢。