2013-06-18 6 views
1

oracle-plsql 기능을 실행하는 일괄 작업이 있습니다. 실제로 쿼츠 스케쥴러는 oracle-plsql 함수를 호출하는 Java 프로그램을 호출합니다. 이 oracle plsql 함수는 4 개 테이블의 데이터 (6 개월 이상)를 삭제 한 다음 트랜잭션을 커밋합니다.oracle : Java에서 plsql 프로 시저를 호출 할 때 연결 시간 초과

이 배치 작업은 테스트 환경에서 성공적으로 실행되었지만 2 주 전에 발생한 테이블에 새 데이터가 덤프 될 때 실패하기 시작했습니다.이 코드는 이번 주에 프로덕션으로 이동해야합니다. 이전에는 각 테이블의 행 수가 0.1 만 개를 넘지 않았습니다. 그러나 이제는 3 개의 테이블에서 100 만, 다른 테이블에서 240 만입니다.

3 시간 동안 실행하면 Java (로그 파일에 기록됨)에 오류가 발생합니다. "... 연결 재설정, 중첩 예외는 java.sql.SQLException : Io 예외 : 연결 재설정 ..." . 테이블의 행 수를 확인하면 테이블에서 레코드가 삭제되지 않았 음이 분명했습니다.

오라클 데이터베이스에서 연결이 시간 초과되어 호출 세션이 더 이상 활성화되지 않으면 plsql 프로 시저/기능이 자동으로 종료/종료 될 수 있습니까?

미리 감사드립니다. Pradeep.

답변

1

은 정의되지 않았기 때문에이 비활성 상태이기 때문에 PL/SQL이 종료되지 않습니다. 아직 실행 중입니다. 클라이언트에게 다시 네트워크 트래픽을 생성하지는 않습니다.

네트워크 수준에서 연결이 끊어지는 것으로 나타납니다. 리스너 타임 아웃, 방화벽 타임 아웃 또는 다른 것일 수 있습니다. 3 시간이 지나면 일관되게 네트워크 무결성보다는 어딘지에서 시간 초과가 구성됩니다. 이는 무작위 (가능하면 복구 가능) 일 것입니다.

네트워크 연결이 중단되면 오라클은 어느 시점에서 통지하고 세션을 종료합니다. 이렇게하면 PL/SQL 호출이 종료되고 이로 인해 수행 한 모든 작업이 롤백되며 이로 인해 시간이 걸릴 수 있습니다.

3 백만 건의 레코드라도 3 시간이 오랜 시간 삭제 된 것처럼 보입니다. 아마도 프로 시저 내에서 개별 삽입을 사용하여 비효율적으로 삭제할 수 있습니다. 물론 당신을 정말로 도움이되지 않습니다. 프로덕션 환경에서 연결을 종료하는 설정이 없거나 시간 제한이 더 짧을 수 있으므로 런타임을 줄이면 실제 환경에서 총알 방지가되지 않을 수도 있습니다. 아마도 타임 아웃 소스를 찾고 라이브 환경에서 해당 소스를 확인해야 할 것입니다. 비슷한 문제를 미리 대비하려고 노력합니다.

관련 문제