diff --git a/spring-batch-core/src/main/resources/org/springframework/batch/core/migration/6.0/migration-sqlserver.sql b/spring-batch-core/src/main/resources/org/springframework/batch/core/migration/6.0/migration-sqlserver.sql new file mode 100644 index 0000000000..2f87bdaa39 --- /dev/null +++ b/spring-batch-core/src/main/resources/org/springframework/batch/core/migration/6.0/migration-sqlserver.sql @@ -0,0 +1,31 @@ +-- Migration script for Spring Batch 6.0 +-- Changes VARCHAR columns to NVARCHAR to align with Microsoft JDBC driver behavior +-- This improves performance by avoiding implicit conversions and reduces deadlock risk + +-- BATCH_JOB_INSTANCE table +ALTER TABLE BATCH_JOB_INSTANCE ALTER COLUMN JOB_NAME NVARCHAR(100) NOT NULL; +ALTER TABLE BATCH_JOB_INSTANCE ALTER COLUMN JOB_KEY NVARCHAR(32) NOT NULL; + +-- BATCH_JOB_EXECUTION table +ALTER TABLE BATCH_JOB_EXECUTION ALTER COLUMN STATUS NVARCHAR(10) NULL; +ALTER TABLE BATCH_JOB_EXECUTION ALTER COLUMN EXIT_CODE NVARCHAR(2500) NULL; +ALTER TABLE BATCH_JOB_EXECUTION ALTER COLUMN EXIT_MESSAGE NVARCHAR(2500) NULL; + +-- BATCH_JOB_EXECUTION_PARAMS table +ALTER TABLE BATCH_JOB_EXECUTION_PARAMS ALTER COLUMN PARAMETER_NAME NVARCHAR(100) NOT NULL; +ALTER TABLE BATCH_JOB_EXECUTION_PARAMS ALTER COLUMN PARAMETER_TYPE NVARCHAR(100) NOT NULL; +ALTER TABLE BATCH_JOB_EXECUTION_PARAMS ALTER COLUMN PARAMETER_VALUE NVARCHAR(2500); + +-- BATCH_STEP_EXECUTION table +ALTER TABLE BATCH_STEP_EXECUTION ALTER COLUMN STEP_NAME NVARCHAR(100) NOT NULL; +ALTER TABLE BATCH_STEP_EXECUTION ALTER COLUMN STATUS NVARCHAR(10) NULL; +ALTER TABLE BATCH_STEP_EXECUTION ALTER COLUMN EXIT_CODE NVARCHAR(2500) NULL; +ALTER TABLE BATCH_STEP_EXECUTION ALTER COLUMN EXIT_MESSAGE NVARCHAR(2500) NULL; + +-- BATCH_STEP_EXECUTION_CONTEXT table +ALTER TABLE BATCH_STEP_EXECUTION_CONTEXT ALTER COLUMN SHORT_CONTEXT NVARCHAR(2500) NOT NULL; +ALTER TABLE BATCH_STEP_EXECUTION_CONTEXT ALTER COLUMN SERIALIZED_CONTEXT NVARCHAR(MAX) NULL; + +-- BATCH_JOB_EXECUTION_CONTEXT table +ALTER TABLE BATCH_JOB_EXECUTION_CONTEXT ALTER COLUMN SHORT_CONTEXT NVARCHAR(2500) NOT NULL; +ALTER TABLE BATCH_JOB_EXECUTION_CONTEXT ALTER COLUMN SERIALIZED_CONTEXT NVARCHAR(MAX) NULL; \ No newline at end of file diff --git a/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-sqlserver.sql b/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-sqlserver.sql index cbb5958e1f..6b99ba8d80 100644 --- a/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-sqlserver.sql +++ b/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-sqlserver.sql @@ -3,8 +3,8 @@ CREATE TABLE BATCH_JOB_INSTANCE ( JOB_INSTANCE_ID BIGINT NOT NULL PRIMARY KEY, VERSION BIGINT NULL, - JOB_NAME VARCHAR(100) NOT NULL, - JOB_KEY VARCHAR(32) NOT NULL, + JOB_NAME NVARCHAR(100) NOT NULL, + JOB_KEY NVARCHAR(32) NOT NULL, constraint JOB_INST_UN unique (JOB_NAME, JOB_KEY) ) ; @@ -15,9 +15,9 @@ CREATE TABLE BATCH_JOB_EXECUTION ( CREATE_TIME DATETIME NOT NULL, START_TIME DATETIME DEFAULT NULL, END_TIME DATETIME DEFAULT NULL, - STATUS VARCHAR(10) NULL, - EXIT_CODE VARCHAR(2500) NULL, - EXIT_MESSAGE VARCHAR(2500) NULL, + STATUS NVARCHAR(10) NULL, + EXIT_CODE NVARCHAR(2500) NULL, + EXIT_MESSAGE NVARCHAR(2500) NULL, LAST_UPDATED DATETIME NULL, constraint JOB_INST_EXEC_FK foreign key (JOB_INSTANCE_ID) references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) @@ -25,9 +25,9 @@ CREATE TABLE BATCH_JOB_EXECUTION ( CREATE TABLE BATCH_JOB_EXECUTION_PARAMS ( JOB_EXECUTION_ID BIGINT NOT NULL, - PARAMETER_NAME VARCHAR(100) NOT NULL, - PARAMETER_TYPE VARCHAR(100) NOT NULL, - PARAMETER_VALUE VARCHAR(2500), + PARAMETER_NAME NVARCHAR(100) NOT NULL, + PARAMETER_TYPE NVARCHAR(100) NOT NULL, + PARAMETER_VALUE NVARCHAR(2500), IDENTIFYING CHAR(1) NOT NULL, constraint JOB_EXEC_PARAMS_FK foreign key (JOB_EXECUTION_ID) references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) @@ -36,12 +36,12 @@ CREATE TABLE BATCH_JOB_EXECUTION_PARAMS ( CREATE TABLE BATCH_STEP_EXECUTION ( STEP_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY, VERSION BIGINT NOT NULL, - STEP_NAME VARCHAR(100) NOT NULL, + STEP_NAME NVARCHAR(100) NOT NULL, JOB_EXECUTION_ID BIGINT NOT NULL, CREATE_TIME DATETIME NOT NULL, START_TIME DATETIME DEFAULT NULL, END_TIME DATETIME DEFAULT NULL, - STATUS VARCHAR(10) NULL, + STATUS NVARCHAR(10) NULL, COMMIT_COUNT BIGINT NULL, READ_COUNT BIGINT NULL, FILTER_COUNT BIGINT NULL, @@ -50,8 +50,8 @@ CREATE TABLE BATCH_STEP_EXECUTION ( WRITE_SKIP_COUNT BIGINT NULL, PROCESS_SKIP_COUNT BIGINT NULL, ROLLBACK_COUNT BIGINT NULL, - EXIT_CODE VARCHAR(2500) NULL, - EXIT_MESSAGE VARCHAR(2500) NULL, + EXIT_CODE NVARCHAR(2500) NULL, + EXIT_MESSAGE NVARCHAR(2500) NULL, LAST_UPDATED DATETIME NULL, constraint JOB_EXEC_STEP_FK foreign key (JOB_EXECUTION_ID) references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) @@ -59,16 +59,16 @@ CREATE TABLE BATCH_STEP_EXECUTION ( CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT ( STEP_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY, - SHORT_CONTEXT VARCHAR(2500) NOT NULL, - SERIALIZED_CONTEXT VARCHAR(MAX) NULL, + SHORT_CONTEXT NVARCHAR(2500) NOT NULL, + SERIALIZED_CONTEXT NVARCHAR(MAX) NULL, constraint STEP_EXEC_CTX_FK foreign key (STEP_EXECUTION_ID) references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID) ) ; CREATE TABLE BATCH_JOB_EXECUTION_CONTEXT ( JOB_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY, - SHORT_CONTEXT VARCHAR(2500) NOT NULL, - SERIALIZED_CONTEXT VARCHAR(MAX) NULL, + SHORT_CONTEXT NVARCHAR(2500) NOT NULL, + SERIALIZED_CONTEXT NVARCHAR(MAX) NULL, constraint JOB_EXEC_CTX_FK foreign key (JOB_EXECUTION_ID) references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) ) ;