Batch failure. The batch was submiited, but at least one exception occurred on an individual member of the batch. Use getNextExceiption() to retrieve the exceptions for spcific batched elements. ERRORCODE=4229, SQLSTATE=null
일괄처리에 실패했습니다. 일괄처리가 제출되었지만 각 일괄처리 구성원에서 최소 한 개의 예외가 발생했습니다. getNextExceptuon()을 사용하여 특정 일괄처리 요소에 대한 예외를 검색하십시오. ERRORCODE = -4229, SQLSTATE=null
javabatch를 수행하는데 에러가 발생했다
ERRORCODE=-4229 인데 이 에러는DB일괄처리 중 하나 이상의 예외가 발생했음을 나타낸다.
getNextException() 메서드를 사용해서 일괄 작업요소에 대한 예외를 검색 할 수 있다고 하긴 하는데, exception에 대한 처리는 보통 공통파트에서 프레임워크 구성을 하기때문에 개별적인 예외처리는 어렵지만 이런 경우에는 에러처리를 위해 해당 예외 발생 요소를 로그로 남겨 주고 있을거라고 생각된다.
예외 사항에는 너무 다양한 경우가 있기떄문에, 이 에러코드 자체로는 절대(?)해결이 불가능 할 것 같고, 디버깅모드를 통해 문제가 되는 쿼리를 확인한다던지 말한대로 에러를 잡아서 getNextException()을 통해서 에러를 확인하는 과정이 추가로 필요하다.
일반적인 확인 절차에는 마지막에 문서참조까지 있으니, 그래도 안되면 문서를 확인해 수준이다. 결국은 어떤 요소에서 문제가 있는지 확인한는게 우선이고, 그리고 그 요소에서 발생한 예외사항을 빠르게 확인해 조치하면 되겠다.
일반적인 확인 절차
- use getNextException() 예외요소에 대한 상세정보 확인
- check SQL Statements SQL문 확인
- chekc data Integrity 데이터 무결성 확인
- review database Logs 데이터베이스 로그 검토
- batch Size 일괄 크기 확인
- database connection 데이터베이스 연결 확인
- transactional behavior 트랜잭션 동작 확인
- update database driver 데이터베이스 드라이버 업데이트
- consult database documentation 데이터베이스 문서 참조
나는? 조회 후 insert 하는 배치였는데, 돌렸던 배치를 그대로 또 돌려서
ㅇ 중복된 데이터가 들어가는 문제가 있었다.
ㅇ 또다른 예외로 데이터 자리수가 컬럼 자리수보다 큰 경우도 있었다.
ㅇ 조회데이터가 여러건 나와서 처리가 되지 않는 경우도 있었다.
아주 많은 그냥 배치 일괄 처리 중 발생하는 모든 에러가 여기 포함되기 때문에이 코드로는 알 수 없고,, 구체적인 예외요소를 알아야한다.
구체적인 예외 요소만 알면 거의 바로 원인규명 및 해결이 가능하다.
하지만 저 오류만 보고서는 절대 알 수 없음
기본 키, 고유 제한조건 또는 고유 인덱스가 테이블에서 인덱스 키의 중복 값을 제한하므로 INSERT, UPDATE문에 있는 하나 이상의 값 또는 DELETE문에 으한 외부 키 갱신이 유효하지 않습니다. SQLCODE=-803, SQLSTATE=23505