Oracle Database와 함께 Java-JDBC API에 약간의 요구 사항이 있습니다. 내가 오라클에 대한 사실이며,이 link과 유사한 예제를 사용하고 있습니다 autoCommit을 기본값으로했습니다.JDBC 일괄 업데이트 문제
그러나 1000 개의 배치를 추가하면 각각이 삽입이라고 말할 수 있습니다. 그리고 약 20 개의 레코드가 몇 가지 제약 조건을 위반했다고 가정합니다. 나머지 980은 데이터베이스에 COMMITTED (이후에는 다른 연결을 사용하는 다른 쿼리에서 볼 수 있음)하고 20 개의 레코드를 무시하기를 원합니다. 위의 예에서 한 행이 트랜잭션을 위반하면 catch 블록에서 커밋 할 때 트랜잭션은 첫 번째 오류까지 만 커밋합니다.
일괄 처리 업데이트는 모든 행이 통과하고 예외 처리가 하나가 아니라는 것을 확실히 알고있을 때만 수행되지만 기존 데이터베이스를 패치하여 "일종의 불량 사례"는 괜찮습니다. :) 모든 코드 샘플을 높이 평가할 것입니다. 내가 그렇게 매일 1000 개 개의 레코드를 일괄 처리하고 3M 행에 가까운 처리하고 있기 때문에 간단한 삽입/업데이트를 사용
**** 자세한 내용 ****
괜찮 없습니다. 루프에 1000 개의 인서트 (예외 제외)를 추가하는 것만으로도 배치 업데이트 < 300ms가 아닌, 더 많은 시간이 소요됩니다 (매 1000 레코드 당 약 5 초).
문제점 :Oracle 데이터베이스에서 드라이버는 첫 번째 FAILURE에서 멈춘 것처럼 보입니다. 즉, 1000 행이 배치되고 100 번째 오류가 발생하면 1000 번째 행까지 진행합니다. 내 생각에 이것은 JDBC에서 (오라클과 함께) 할 수 없다고 생각합니다 link처럼 소수의 데이터베이스 만 이러한 기능을 지원하고 있음을 나타냅니다. 아마도 오라클은 하나가 아닙니다.
삽입물을 하나씩 수행하는 것을 방지 할 수있는 방법은 무엇입니까? 공연? –
일괄 처리 큐에 데이터를 추가하기 전에 제약 조건을 프로그래밍 방식으로 테스트 할 수 있습니까? – Elijah
예, 질문에 업데이트 된 처리 시간을 확인하십시오 –