간헐적 인 ORA-12519 (TNS : 적절한 핸들러 없음) 오류를 일으킬 수있는 이유

StackOverflow https://stackoverflow.com/questions/205160

문제

우리는 Oracle 10 데이터베이스 (Hudson을 연속 통합 서버로 사용) 앞에서 Weblogic 9에 대해 Junit 4 테스트 스위트를 실행하고 있으며 때로는 스크립트 찢어짐 중에 ORA-12519 충돌이 발생합니다. 그러나 오류는 매우 간헐적입니다.

  • 일반적으로 동일한 테스트 클래스에서 발생합니다
  • 동일한 테스트 사례에서 항상 발생하지는 않습니다 (때로는 통과).
  • 같은 수의 테스트 사례에 대해서는 발생하지 않습니다 (3-9 세)
  • 때로는 전혀 일어나지 않고 모든 것이 통과됩니다

이 작업이 로컬로 발생하지 않는다고 보장 할 수는 없지만 (물론 동일한 데이터베이스에 대해 실행할 때) 문제없이 동일한 클래스 제품군을 여러 번 실행했습니다.

어떤 아이디어?

도움이 되었습니까?

해결책

이것이 모든 사람의 답변이 될지 모르겠지만, 파기 후에, 우리가 생각해 낸 것이 있습니다.

오류는 청취자가 연결을 수락하지 않았다는 사실에 의해 발생하지만, 다른 테스트가 정상으로 연결될 수있을 때 왜 그 오류가 발생합니까 (SQLPlus를 통해 문제가 없음)? 이 문제의 핵심은 우리가 연결할 수 없다는 것이 아니라 간헐적 인

일부 조사 후, 우리는 클래스 설정 중에 생성 된 일부 정적 데이터가 테스트 클래스의 수명에 대한 개방형 연결을 유지하여 새로운 데이터를 만들었 음을 발견했습니다. 이제이 클래스가 범위를 벗어 났을 때 (물론 마지막으로 {} 블록을 통해) 모든 리소스가 올바르게 릴리스되었지만,이 클래스가 사용 가능한 모든 연결을 삼킬 때 실행 중에 몇 가지 경우가있었습니다 (좋아요, 나쁜 점이 있습니다. 연습 경고 - 이것은 풀을 사용하지 않고 직접 연결된 단위 테스트 코드이므로 생산에서 동일한 문제가 발생할 수 없습니다).

수정 사항은 해당 클래스를 정적으로 만들지 않고 클래스 설정에서 실행하는 것이 아니라 대신 메소드 설정 설정 및 찢어지는 방법에 사용하는 것이 었습니다.

따라서 자신의 앱 에서이 오류가 발생하면 그 나쁜 소년의 프로파일 러를 때리고 연결 누출이 있는지 확인하십시오. 도움이되기를 바랍니다.

다른 팁

비슷한 오류가 발생했지만 동일한 오류 메시지는 발견 된 서비스 처리기 수를 늘리는 것입니다. (이 오류의 인스턴스는 Weblogic Portal 연결 풀에서 너무 많은 연결로 인해 발생했습니다.)

  • 운영 SQL*Plus 그리고 로그인 SYSTEM. Oracle DB XE를 설치하는 동안 사용한 비밀번호를 알아야합니다.
  • 명령을 실행하십시오 alter system set processes=150 scope=spfile; sql*plus
  • 매우 중요 : 데이터베이스를 다시 시작하십시오.

여기에서:

http://www.atpeaz.com/index.php/2010/fixing-the-ora-12519-tnsno-preftservice--found-error/

나는 또한 같은 문제를 겪었고, 많은 곳에서 답을 찾았습니다. 프로세스/서비스 처리기 수를 변경하기 위해 비슷한 답변을 많이 받았습니다. 그러나 나는 그것을 다시 재설정하는 것을 잊어 버리면 어떻게 될까요?

그런 다음 사용해 보았습니다 Thread.sleep() 내 각각의 방법 connection.close();.

나는 방법을 모르겠지만 적어도 나를 위해 일하고 있습니다.

누군가가 그것을 시도하고 어떻게 작동하는지 알아 내고 싶다면 계속하십시오. 또한 프로그래밍 세계의 초보자이기 때문에 알고 싶습니다.

비슷한 문제가있었습니다. 데이터베이스 팩 (스프링 JDBC) 테스트를 실행할 때마다 발생했습니다. SpringJUnit4ClassRunner, 그래서 나는 문제를 해결했다 @DirtiesContext 응용 프로그램 컨텍스트를 정리하고 모든 리소스를 해제하기 위해 각 테스트에 대한 주석이 있으므로 각 테스트는 응용 프로그램 컨텍스트의 새로운 비활성화로 실행될 수 있습니다.

연결 풀을 통해 DB에 많은 연결을 열고 연결 풀 (실제로 ManagedDatasource)을 "정지"하여 각 테스트가 끝날 때 연결을 해제하기 위해이 문제가 발생한 단위 테스트 에서이 문제를 겪었습니다. 나는 항상 테스트 스위트의 어느 시점에서 연결이 부족했습니다.

내 테스트의 분해 ()에 Thread.sleep (500)를 추가하면 문제가 해결되었습니다. Connection Pool STOP ()가 다른 스레드에서 활성 연결을 출시하여 기본 스레드가 계속 실행되면 정리 스레드가 너무 뒤쳐져 Oracle Server가 연결되지 않았다고 생각합니다. 수면을 추가하면 배경 스레드가 풀링 된 연결을 해제 할 수 있습니다.

DB 서버가 훨씬 더 크고 건전한 작업이 혼합되어 있기 때문에 이는 실제 세계에서 훨씬 덜 문제가되지 않습니다 (끝없는 DB 연결/분리 작업이 아니라).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top