ORA-12519가 간헐적으로 발생하는 원인(TNS: 적절한 핸들러를 찾을 수 없음)
Junit 4 테스트 스위트를 Oracle 10 데이터베이스 앞에서 Weblogic 9에 대해 실행하고 있습니다(Hudson을 연속 통합 서버로 사용).스크립트 해체 중에 ORA-12519가 발생할 수 있습니다.단, 에러는 매우 간헐적입니다.
- 일반적으로 동일한 테스트 클래스에 대해 발생합니다.
- 같은 테스트 케이스에서 항상 발생하는 것은 아니다(경우에 따라 합격).
- 테스트 케이스 수가 동일하지 않음(3~9건)
- 때로는 전혀 일어나지 않고, 모든 것이 지나간다.
물론 같은 데이터베이스에 대해 실행되는 경우 로컬에서 이 문제가 발생하지 않는다고 보장할 수는 없지만, 문제 없이 동일한 클래스 스위트를 여러 번 실행했습니다.
좋은 생각 있어요?
이게 모두의 답이 될지는 모르겠지만, 좀 더 파헤친 후에, 우리가 생각해낸 게 있어요.
이 에러는 리스너가 접속을 받아들이지 않았기 때문에 발생하는 것은 분명합니다만, 다른 테스트에서는 정상적으로 접속할 수 있는데(sqlplus를 통해서도 접속할 수 있는 경우) 왜 이 에러가 발생합니까?문제의 핵심은 접속할 수 없다는 것이 아니라 간헐적이라는 것이었다.
조사 결과, 클래스 셋업 중에 생성된 정적 데이터가 테스트 클래스 기간 동안 열린 연결을 유지하며 진행 중인 새 연결을 생성하는 것으로 나타났습니다.이 클래스가 범위를 벗어났을 때(물론 최종 {}블럭을 통해) 모든 리소스가 적절히 해방되었지만 실행 중에 이 클래스가 사용 가능한 모든 연결을 삼키는 경우가 있었습니다(좋습니다.잘못된 관행 경고 - 이것은 풀을 사용하지 않고 직접 연결한 유닛 테스트 코드이므로 동일한 문제가 발생합니다).실제 가동에서는 발생할 수 없습니다.)
수정은 해당 클래스를 정적으로 만들지 않고 클래스 셋업으로 실행하는 대신 메서드별 setUp 메서드 및 tearDown 메서드로 사용하는 것이었습니다.
따라서 자신의 앱에서 이 오류가 발생하면 프로파일러를 그 나쁜 놈에게 터치하여 접속 누수가 없는지 확인합니다.도움이 됐으면 좋겠다.
비슷한 에러를 발견했지만, 같은 에러 메세지로 발견된 다른 해결 방법은, 검출된 서비스 핸들러의 수를 늘리는 것입니다.(이 에러의 원인은 Weblogic Portal Connection 풀에 접속이 너무 많기 때문입니다).
- 실행합니다.
SQL*Plus
할 수 있습니다.SYSTEM
Oracle DB XE를 사용합니다. - 합니다.
alter system set processes=150 scope=spfile;
SQL*Plus SQL IDE를 사용합니다. - 매우 중요: SPFILE에서 변경을 활성화하기 위해 데이터베이스를 재시작합니다.
여기서부터:
저도 같은 문제가 있어서 여러 곳에서 답을 찾아봤어요.프로세스/서비스 핸들러 수를 변경하기 위해 비슷한 답변을 많이 받았습니다.하지만 다시 되돌리는 걸 잊으면 어떡하지? 라고 생각했어요.
나서 나는 ★★★★★★★★★★★★★★★★★★★★★★★를 사용해 보았다.Thread.sleep()
뒤에 있는 connection.close();
.
어떻게 하는지는 모르겠지만 적어도 나한테는 효과가 있어.
시험해 보고 작동 상황을 알고 싶은 사람이 있으면 말씀하세요.저도 프로그래밍 초보자이기 때문에 알고 싶습니다.
유닛 테스트에서 이 문제가 발생했습니다.유닛 테스트에서는 접속 풀을 통해 DB에 대한 많은 접속을 열고 각 테스트 종료 시 접속 풀(Managed Data Source)을 "정지"하여 연결을 해제합니다.테스트의 어느 시점에서는 항상 접속이 끊어졌습니다.
스레드 추가.테스트의 teardown()에서 sleep(500)을 실시하여 문제를 해결했습니다.제 생각에는 접속 풀 stop()이 다른 스레드의 활성 연결을 해제하고 메인 스레드가 계속 실행되면 정리 스레드가 너무 늦어지기 때문에 Oracle 서버에서 연결이 끊어집니다.sleep을 추가하면 백그라운드 스레드가 풀링된 연결을 해제할 수 있습니다.
DB 서버는 훨씬 더 크고 (끝없는 DB 연결/연결 해제 작업뿐만 아니라) 운영이 적절하게 혼합되어 있기 때문에 실제 환경에서는 이 문제가 훨씬 덜합니다.
저도 비슷한 문제가 있었어요.Spring JDBC에서 마다 이 했습니다.SpringJUnit4ClassRunner
그래서 문제를 해결했습니다.@DirtiesContext
각 테스트에 대한 주석을 사용하여 애플리케이션 컨텍스트를 청소하고 모든 리소스를 해방합니다.따라서 각 테스트는 애플리케이션 컨텍스트의 새로운 초기화로 실행될 수 있습니다.
언급URL : https://stackoverflow.com/questions/205160/what-can-cause-intermittent-ora-12519-tns-no-appropriate-handler-found-errors
'programing' 카테고리의 다른 글
Wordpress 폼에서 SOAP 웹 서비스를 호출하려면 어떻게 해야 합니까? (0) | 2023.02.28 |
---|---|
토큰 기반 인증을 위한 JWT vs 쿠키 (0) | 2023.02.28 |
Oracle에서 시퀀스를 리셋하려면 어떻게 해야 합니까? (0) | 2023.02.23 |
찾을 수 없는 아이콘 리액션-대박 (0) | 2023.02.23 |
워드프레스의 각 카테고리에서 하나의 게시물만 받는 방법 (0) | 2023.02.23 |