Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在SQL Server中截断Spring批处理作业表_Java_Sql Server_Spring Mvc_Spring Batch - Fatal编程技术网

Java 如何在SQL Server中截断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_作业执行]

我开发了Spring批处理作业,用于处理数十万个平面文件。这个程序长期运行正常。之后,批处理表的行数和作业的执行时间增加


我试图截断这些表。我看到了,我应该取消一些禁用的限制。然后,我在最后截断了表,添加了以前删除的约束。此代码如下所示,与主程序(文件处理)同时工作


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.


我如何解决这种情况?非常感谢。

经过长时间的研究,我发现了一个干净的方法

  • 使用图书馆。源代码在github上是公开的,您可以在其中看到一个示例

  • 手动:首先确保服务器没有运行作业。然后,如果您使用的是sql server,则可以在这里的数据库中运行。或者,如果您正在使用其他数据库,您可以为自己找到一个脚本。然后,您可以通过两种方式重新创建架构:

  • 使用官方脚本手动完成。如果您正在使用sql server,请查看或搜索最佳选项
  • 打开
    spring.batch.initializeschema
    属性,使其始终
    。然后重新启动服务器以自动创建spring批处理架构
  • spring.batch.initializeschema=始终


    “此代码如下所示,与主程序(文件处理)同时工作。”:如果在作业运行时截断表,则出现类似问题并不奇怪。您是否考虑过在没有作业运行时截断表?我认为是这样,但这些作业必须同时运行。也许我会检查隔离级别。谢谢你的回答。我认为这是最简单的方法。我会用的。非常感谢。