2017-10-07 31 views
0

ODP.Net을 사용하여 ASP MVC 페이지에서 Oracle 데이터베이스에 연결하는 웹 페이지가 있습니다. 어떤 이유에서든 애플리케이션 풀이 재활용되면 사용자로드가 많은 동안 내부 오라클 클래스에서 연결 시간 초과 오류가 거의 발생하지 않습니다.C# 응용 프로그램 풀이 재활용 될 때 Oracle 데이터베이스 연결 시간 초과

내부 예외 : 스택 트레이스 : OracleInternal.ConnectionPool.PoolManager`3.Get (ConnectionString을 csWithDiffOrNewPwd, 부울 bGetForApp, 문자열 affinityInstanceName, 부울 bForceMatch)에서

어떻게 우리가이 시나리오를 처리 할 수 ​​있습니까? 이 오류의 원인은 무엇일까요?

+0

이것이 응용 프로그램 풀 재활용과 관련이 없다고 생각합니다. 문제는 최대 풀 크기에 도달했기 때문입니다. 코드 어딘가에 연결을 닫지 않아 다른 요청을 처리하기 위해 풀에 연결을 반환하지 않거나 풀 크기가 너무 작습니다. –

+0

연결을 닫는 것을 잊었을 때 결국 연결이 닫히지 만 GC가 해당 오브젝트를 수집 할 때만 발생합니다. 따라서 많은 연결이 오랫동안 풀에 반환되지 않으며 최대 풀 크기에 도달하게됩니다. –

+0

연결이 닫히기 위해 USING 블록 내부에서 연결을 만들고 있습니다. 이 문제는 때로는 연결이 닫히지 않는 경우에만 발생하기 때문에 자주보아야합니다. – Zeus

답변

0

사용자마다 또는 다른 변수 매개 변수와 다른 새로운 연결 문자열을 사용하는 경우 최대 연결 수를 초과 할 수 있습니다. 풀링은 동일한 문자열을 사용하는 경우에만 작동합니다. 커버 아래에서 "닫기"는 무시되고 연결 관리자는 연결을 계속 열어 둡니다. SQL Server에서는 기존 연결이 다시 사용될 때마다 추적 콘솔에서 연결 재설정을 볼 수 있습니다.

오라클은 아마 비슷한 것을 가지고있을 것입니다.

연결 추적 및 가능한 경우 연결 재설정은 많은 연결을 만드는 것에 대해 약간의 조명을 제공합니다.

+0

web.config에서와 동일한 연결 문자열 – Zeus