簡體   English   中英

如何在 SQL Server 中截斷 Spring Batch 作業表

[英]How to Truncate Spring Batch Job Tables in SQL Server

我開發了 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.

我該如何解決這種情況? 非常感謝。

經過長時間的研究,我發現了一個最簡單的方法。

  1. 使用這個庫。 源代碼在 github 上是公開的,您可以在其中看到閱讀此測試的示例。

  2. 手動:首先確保您的服務器沒有運行作業。 然后,如果您使用的是 sql server,則可以在此處在您的數據庫中運行官方刪除模式腳本 或者,如果您正在使用其他數據庫,您可以在此處找到適合您的腳本。 然后,您可以通過兩種方式重新創建架構:

一種。 使用官方腳本手動完成。 如果您正在使用 sql server,請查看此處在此處搜索您的最佳選擇。

spring.batch.initialize-schema屬性打開為always 然后重新啟動您的服務器以自動重新創建 spring 批處理模式。

spring.batch.initialize-schema=總是

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM