오라클 데이터베이스를 사용하여 다른 서비스와의 상호 작용 및 단계를 추적하는 Java 워크 플로 응용 프로그램이 있습니다. 워크 플로를 실행하는 동안 여러 개의 삽입/업데이트/선택이 수행되며 성공적으로 완료되기 전에 실행 된 삽입/업데이트 커밋이 있더라도 select에서 업데이트 된 데이터를 반환하지 않는 경우가 있습니다. 워크 플로우 오류 (잘못된 데이터로 인해)가 끝난 후, 제 3 자 앱을 통해 데이터베이스로 돌아 가면 새로운/업데이트 된 데이터가 표시됩니다. 우리의 위탁이 통과 될 때와 보이는 때 사이에 지연이있는 것 같습니다. 이는 모든 워크 플로 실행 중 약 2 %에서 발생하며 데이터베이스 사용량이 많은 경우 증가합니다.커밋과 선택 사이의 오라클 지연
데이터베이스 지원 팀은 max-commit-propagation-delay 매개 변수를 기본값 인 700으로 변경하는 것이 좋습니다. 이것은 가능한 해결책 인 것처럼 보였지만 궁극적으로 우리의 문제를 해결하지 못했습니다.
응용 프로그램이 WebSphere에서 실행되고 Oracle 데이터베이스가 JDBC 데이터 소스로 구성됩니다. 우리는 Oracle 10.1g을 사용하고 있습니다. 이 애플리케이션은 Java 1.5로 작성되었습니다.
도움을 주시면 감사하겠습니다.
편집 : ORM을 사용하여 샘플 코드
DataSource ds; // spring configured
String sql = "INSERT INTO " + currentTable + " (" + stepId + ',' + stepEntryId + ", " + stepStepId + ", " + stepActionId + ", " + stepOwner + ", " + stepStartDate + ", " + stepDueDate + ", " + stepFinishDate + ", " + stepStatus + ", " + stepCaller + ") VALUES (?, ?, ?, null, ?, ?, ?, null, ?, null)";
Connection conn = ds.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql);
// set values
stmt.executeUpdate();
// close connections
// later on in the code...
Connection conn = ds.getConnection();
PreparedStatement stmt = null;
ResultSet rset = null;
String sql = "SELECT " + stepId + ", " + stepStepId + ", " + stepActionId + ", " + stepOwner + ", " + stepStartDate + ", " + stepDueDate + ", " + stepFinishDate + ", " + stepStatus + ", " + stepCaller + " FROM " + currentTable + " WHERE " + stepEntryId + " = ?";
stmt = conn.prepareStatement(sql);
stmt.setLong(1, entryId);
rset = stmt.executeQuery();
//close connections
[Oracle 설명서] (http://download.oracle.com/docs/cd/B14117_01/server.101/b10755/initparams115.htm)의 매개 변수 'max_commit_propagation_delay'는 RAC 설정에만 적용되는 것으로 보입니다. RAC 인스턴스에 연결하고 있습니까? –
데이터가 트랜잭션의 일부로 커밋되고 있습니까? 아니면 읽었습니까? –