MariaDB 배치 개발 환경 수행 시 Meta Table Key 중복오류
- 작성자 :
- 김*배
- 작성일 :
- 2024-04-11 18:13:02
- 조회수 :
- 167
- 구분 :
- 개발환경 / 4.1
- 진행상태 :
- 완료
Q
동일 배치 작업에 대해 2번째 수행 시 배치 관리 meta table 저장 시 PK 중복 오류가 발생 합니다.
MariaDB 를 사용해서 schema-ddl-mysql.slq 파일로 Meta table 생성 했습니다.
첫번째 로그를 보면 update BATCH_JOB_SEQ set ID = last_insert_id(ID + 1) limit 1 가 정상 수행되어 commit 까지 되었으나 실제 수행된 후 BATCH_JOB_SEQ 테이블을 조회하면 아무 데이터가 존재하지 않습니다.
또한 BATCH_JOB_INSTANCE 테이블의 JOB_INSTANCE_ID 값이 0 로 생성되고 있습니다.
그래서 두번째 작업 시에도 BATCH_JOB_SEQ의 ID 값이 증가 되지 않기에 동일하게 0 값이 세팅 되어 BATCH_JOB_INSTANCE 등록 시 중복 오류가 나는 것으로 보입니다.
무슨 설정을 해야 해당 증상이 해결 될 수 있을 까요?
* 첨부파일 목록
1. 배치수행로그_1st : 배치 작업 첫번째 수행 로그
2. 배치수행로그_2nd : 동일 배치 작업 두번째 수행 로그
3. BATCH_JOB_SEQ.PNG : 테이블 BATCH_JOB_SEQ 데이터 조회 이미지
4. BATCH_JOB_INSTANCE.PNG : 테이블 BATCH_JOB_INSTANCE 데이터 조회 이미지
MariaDB 를 사용해서 schema-ddl-mysql.slq 파일로 Meta table 생성 했습니다.
첫번째 로그를 보면 update BATCH_JOB_SEQ set ID = last_insert_id(ID + 1) limit 1 가 정상 수행되어 commit 까지 되었으나 실제 수행된 후 BATCH_JOB_SEQ 테이블을 조회하면 아무 데이터가 존재하지 않습니다.
또한 BATCH_JOB_INSTANCE 테이블의 JOB_INSTANCE_ID 값이 0 로 생성되고 있습니다.
그래서 두번째 작업 시에도 BATCH_JOB_SEQ의 ID 값이 증가 되지 않기에 동일하게 0 값이 세팅 되어 BATCH_JOB_INSTANCE 등록 시 중복 오류가 나는 것으로 보입니다.
무슨 설정을 해야 해당 증상이 해결 될 수 있을 까요?
* 첨부파일 목록
1. 배치수행로그_1st : 배치 작업 첫번째 수행 로그
2. 배치수행로그_2nd : 동일 배치 작업 두번째 수행 로그
3. BATCH_JOB_SEQ.PNG : 테이블 BATCH_JOB_SEQ 데이터 조회 이미지
4. BATCH_JOB_INSTANCE.PNG : 테이블 BATCH_JOB_INSTANCE 데이터 조회 이미지
환경정보
-
- OS 정보 : Window10
- 표준프레임워크 버전 : 4.1
- JDK(JRE) 정보 :
- WAS 정보 : Tomcat
- DB 정보 : MariaDB
- 기타 환경 정보 :
A
안녕하세요.
표준프레임워크센터입니다.
last_insert_id() 함수는 가장 최근에 성공적으로 수행된 Insert 구문의
첫번째 AUTO_INCREMENT 컬럼의 값을 반환하는 함수이므로
질문의 내용으로만 미뤄보면 원하는 처리가 어려울 것 같으므로
배치 프로세서를 확인하여 적절한 시퀀스 정책을 고려해야 할 것 같습니다.
MyBatis를 사용한다면 selectKey를 이용한 방법을 생각할 수 있고
MariaDB 10.3 버전 이상에서는 시퀀스를 활용할 수 있으니
참고하시기 바랍니다.
감사합니다.
표준프레임워크센터입니다.
last_insert_id() 함수는 가장 최근에 성공적으로 수행된 Insert 구문의
첫번째 AUTO_INCREMENT 컬럼의 값을 반환하는 함수이므로
질문의 내용으로만 미뤄보면 원하는 처리가 어려울 것 같으므로
배치 프로세서를 확인하여 적절한 시퀀스 정책을 고려해야 할 것 같습니다.
MyBatis를 사용한다면 selectKey를 이용한 방법을 생각할 수 있고
MariaDB 10.3 버전 이상에서는 시퀀스를 활용할 수 있으니
참고하시기 바랍니다.
감사합니다.