java - 如何在 SQL Server 中截断 Spring Batch 作业表
问题描述
我开发了 Spring Batch Jobs 来处理数十万个平面文件。该程序长时间运行正常。之后,批处理表的行数和作业的执行时间增加。
我试图截断这些表。我看到,我应该放弃一些禁用的限制。然后,我最后截断了表,添加了之前删除的约束。该代码如下所示,与主程序(文件处理)同时工作。
ALTER TABLE [dbo].[BATCH2_STEP_EXECUTION] drop CONSTRAINT [JOB2_EXEC_STEP_FK]
ALTER TABLE [dbo].[BATCH2_JOB_EXECUTION] drop CONSTRAINT [JOB2_INST_EXEC_FK]
ALTER TABLE [dbo].[BATCH2_JOB_EXECUTION_PARAMS] drop CONSTRAINT [JOB2_EXEC_PARAMS_FK]
ALTER TABLE [dbo].[BATCH2_JOB_EXECUTION_CONTEXT] drop CONSTRAINT [JOB2_EXEC_CTX_FK]
ALTER TABLE [dbo].[BATCH2_STEP_EXECUTION_CONTEXT] drop CONSTRAINT [STEP2_EXEC_CTX_FK]
truncate table BATCH2_JOB_EXECUTION_PARAMS
truncate table BATCH2_JOB_EXECUTION_CONTEXT
truncate table BATCH2_JOB_INSTANCE
truncate table BATCH2_JOB_EXECUTION
truncate table BATCH2_STEP_EXECUTION
truncate table BATCH2_STEP_EXECUTION_CONTEXT
ALTER TABLE [dbo].[BATCH2_JOB_EXECUTION_PARAMS] WITH CHECK ADD CONSTRAINT [JOB2_EXEC_PARAMS_FK] FOREIGN KEY([JOB_EXECUTION_ID])
REFERENCES [dbo].[BATCH2_JOB_EXECUTION] ([JOB_EXECUTION_ID])
GO
ALTER TABLE [dbo].[BATCH2_JOB_EXECUTION_PARAMS] CHECK CONSTRAINT [JOB2_EXEC_PARAMS_FK]
GO
ALTER TABLE [dbo].[BATCH2_JOB_EXECUTION_CONTEXT] WITH CHECK ADD CONSTRAINT [JOB2_EXEC_CTX_FK] FOREIGN KEY([JOB_EXECUTION_ID])
REFERENCES [dbo].[BATCH2_JOB_EXECUTION] ([JOB_EXECUTION_ID])
GO
ALTER TABLE [dbo].[BATCH2_JOB_EXECUTION_CONTEXT] CHECK CONSTRAINT [JOB2_EXEC_CTX_FK]
GO
ALTER TABLE [dbo].[BATCH2_JOB_EXECUTION] WITH CHECK ADD CONSTRAINT [JOB2_INST_EXEC_FK] FOREIGN KEY([JOB_INSTANCE_ID])
REFERENCES [dbo].[BATCH2_JOB_INSTANCE] ([JOB_INSTANCE_ID])
GO
ALTER TABLE [dbo].[BATCH2_JOB_EXECUTION] CHECK CONSTRAINT [JOB2_INST_EXEC_FK]
GO
ALTER TABLE [dbo].[BATCH2_STEP_EXECUTION] WITH CHECK ADD CONSTRAINT [JOB2_EXEC_STEP_FK] FOREIGN KEY([JOB_EXECUTION_ID])
REFERENCES [dbo].[BATCH2_JOB_EXECUTION] ([JOB_EXECUTION_ID])
GO
ALTER TABLE [dbo].[BATCH2_STEP_EXECUTION] CHECK CONSTRAINT [JOB2_EXEC_STEP_FK]
GO
ALTER TABLE [dbo].[BATCH2_STEP_EXECUTION_CONTEXT] WITH CHECK ADD CONSTRAINT [STEP2_EXEC_CTX_FK] FOREIGN KEY([STEP_EXECUTION_ID])
REFERENCES [dbo].[BATCH2_STEP_EXECUTION] ([STEP_EXECUTION_ID])
GO
ALTER TABLE [dbo].[BATCH2_STEP_EXECUTION_CONTEXT] CHECK CONSTRAINT [STEP2_EXEC_CTX_FK]
GO
有时,我会收到此错误
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.
我该如何解决这种情况?非常感谢。
解决方案
经过长时间的研究,我发现了一种最简单的方法。
手动:首先确保您的服务器没有运行作业。然后,如果您使用的是 sql server,您可以在此处在您的数据库中运行官方 drop schema 脚本。或者,如果您使用其他数据库,您可以在此处找到适合您的脚本。然后,您可以通过两种方式重新创建架构:
一个。使用官方脚本手动完成。如果您使用 sql server 或在此处搜索最佳选项,请查看此处。
湾。spring.batch.initialize-schema
将属性打开到always
。然后重新启动您的服务器以自动重新创建春季批处理模式。
spring.batch.initialize-schema=总是
推荐阅读
- python-3.x - Python Scipy Curvefit 到线性二次曲线
- c++ - 评估模板括号内的 constexpr
- mysql - mysql - 比较 date=n 和 date=n-1 的字符串值
- kubernetes - Kubernetes Pod 到 Pod 通信
- postgresql - 在 PostgreSQL 中存储过滤条件的最佳方式
- delphi - Delphi FMX 中的目录树视图
- time-complexity - TapeEquilibrium O(N*N)
- regex - 如何查找python中是否有下一个字符?
- c++ - C++ 自定义类映射从映射中检索值添加新索引
- python - 如何访问模块中类方法内的本地对象?