ODP를 지우는 방법.연결 오류 시 NET 연결 풀?
저는 NHibernate와 ODP를 사용하고 있습니다.Oracle 11g 데이터베이스에 연결하기 위한 NET.물론 연결 오류(네트워크 오류, DB 중단 등)가 있을 수 있습니다.이 모든 예외 사항은 제 코드로 처리하고 있으니 문제 없습니다.하지만 물론 사용자는 자신의 작업을 다시 시도할 수 있습니다(단순한 네트워크 오류일 수도 있음). 여기에 문제가 있습니다.
ODP.NET은 기본적으로 연결 풀링을 사용하고 있습니다.일반적으로 문제는 없지만 연결 오류 후 사용자가 작업을 재시도하면 NHibernate는 ODP에서 잘못된(풀링된) 연결을 얻습니다.NET. 다시 작동하려면 사용자가 풀을 비울 때까지 여러 번 재시도해야 합니다.
물론 ODP에서 연결 풀링을 비활성화할 수 있습니다.NET, 하지만 저는 그것을 피하고 싶습니다.또한 풀에서 반환된 각 연결에 대해 DB에 대한 연결을 확인하는 설정에 대해서도 읽었지만, 이 설정은 각 연결에 추가적인 왕복을 추가하여 저도 피하고 싶습니다.
ODP를 구성할 수 있는 방법이 있습니까?연결 예외가 발생할 때 연결 풀을 자동으로 삭제하는 NET?
odac(odp) 11g을 사용할 수 있는 경우 풀에 대해 Validate Connection을 설정해야 합니다.사용하기 전에 연결의 유효성을 검사할 수 있습니다.
연결 확인 특성은 풀에서 나오는 연결을 확인합니다.이 속성은 데이터베이스에 대한 왕복으로 각 연결이 응용프로그램에 제공되기 직전에 유효성을 검사하기 때문에 꼭 필요한 경우에만 사용해야 합니다.잘못된 연결이 흔치 않은 경우 개발자는 연결 유효성 검사 특성을 사용하는 대신 자체 이벤트 핸들러를 만들어 새 연결을 검색하고 유효성을 검사할 수 있습니다.이렇게 하면 일반적으로 성능이 향상됩니다.
충분하지 않으면 오라클에서 이 문서를 사용해 볼 수 있습니다.
연결 풀 관리
ODP.NET 연결 풀 관리는 ODP에 대한 명시적 연결 풀 제어를 제공합니다.NET 응용 프로그램.응용 프로그램은 연결 풀의 연결을 명시적으로 지울 수 있습니다.
연결 풀 관리를 사용하여 응용 프로그램은 다음 작업을 수행할 수 있습니다.
참고: 이러한 API는 에서 지원되지 않습니다.NET 저장 프로시저.ClearPool 메서드를 사용하여 연결 풀에서 연결을 지웁니다.
ClearAllPools 메서드를 사용하여 응용 프로그램 도메인의 모든 연결 풀에서 연결을 지웁니다.
풀에서 연결이 지워지면 ODP.NET은 연결 문자열에서 최소 풀 크기로 설정된 연결 수 이상의 새 연결로 풀을 다시 채웁니다.새 연결이 있다고 해서 풀에 유효한 연결이 있는 것은 아닙니다.예를 들어 ClearPool 또는 ClearAllPools를 호출할 때 데이터베이스 서버가 다운된 경우 ODP가 실행됩니다.NET은 새 연결을 생성하지만, 데이터베이스가 나중에 표시되더라도 데이터베이스에 연결할 수 없으므로 이러한 연결은 여전히 유효하지 않습니다.
응용 프로그램이 데이터베이스에 대한 유효한 연결을 다시 만들 수 있을 때까지 ClearPool 및 ClearAllPools를 호출하지 않는 것이 좋습니다.NET 개발자는 유효한 데이터베이스 연결이 생성될 수 있는지 여부를 지속적으로 확인하고 ClearPool 또는 ClearAllPools를 호출하는 코드를 개발할 수 있습니다.
또한, 이 게시물이 당신에게 도움이 될 수도 있습니다.
업데이트: @MPeltier가 지적한 바와 같이 오라클 12의 경우 링크가 다릅니다.
일반적으로 ADO에 대한 연결 풀을 조작하려고 하면 안 됩니다.NET 공급자(및 WCF 채널 - 별도).기본 데이터 오류(예: 시간 초과, 풀의 연결 끊김 등)에 대비하여 애플리케이션을 탄력적으로 운영해야 하는 경우 적절한 수준의 트랜잭션을 구현하여 데이터 무결성을 보장하고 실패한 작업을 다시 실행하기 위한 로직을 재시도해야 합니다.
언급URL : https://stackoverflow.com/questions/5726499/how-to-clear-the-odp-net-connection-pool-on-connection-errors
'programing' 카테고리의 다른 글
Dim As Dictionary.컴파일 오류:사용자 정의 유형이 정의되지 않았습니다. (0) | 2023.07.20 |
---|---|
타임스탬프/날짜 시간을 UTC에서 EST Oracle SQL로 변환 (0) | 2023.07.20 |
ORA-01465: BLOB를 사용하는 동안 오라클의 16진수가 잘못되었습니다. (0) | 2023.07.20 |
각 문자열에 대해 함수/프로시저 실행 (0) | 2023.07.20 |
스키마 독립 엔티티 프레임워크 코드 첫 번째 마이그레이션 (0) | 2023.07.20 |