ORA-03113: ASP.Net 앱에서 장시간 비활성화 후 통신 채널의 파일 종료
IIS5에서 로드 밸런싱된(세션 상태를 사용하지 않음) ASP.Net 2.0 앱을 ODAC/ODP.Net 드라이버 버전 10.1.0.301을 사용하여 단일 Oracle 10g 서버로 다시 실행하고 있습니다.장시간(몇 시간 동안) 사용하지 않으면 애플리케이션에서 랜덤으로 Oracle 예외가 발생합니다.
예외: ORA-03113: Oracle의 통신 채널에서 파일 종료.데이터 액세스.Client.OracleException.Oracle에서 HandleErrorHelper(Int32 errCode, Oracle Connection, IntPtropsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, 개체 src, 문자열 프로시저)를 처리합니다.데이터 액세스.Client.Oracle Command.Oracle에서 ExecuteReader(부울 재쿼리, Boolean fillRequest, CommandBehavior 동작)를 실행합니다.데이터 액세스.Client.Oracle Command.시스템. 데이터.IDb 명령.리더 실행()
...스택의 오라클 부분은 여기서 끝납니다...
모든 요청에 대해 새 연결을 만들고 있으며, 적절한 연결 폐쇄를 위해 열기 및 닫기를 시도/캐치/최종적으로 랩하고 전체를 사용(OracleConnection yadayada) {...} 블록으로 랩합니다.이 문제는 비활성 상태로 스핀다운된 후 ASP.Net 응용 프로그램을 다시 시작하는 것과 관련이 없는 것 같습니다.
우리는 아직 그 문제를 직접 재현하지 못했습니다.생각, 기도, 도움?
추가: IT 부서에서 확인한 결과 방화벽이 이러한 서버 간의 연결을 끊도록 설정되지 않았습니다.
ORA-03113: 통신 채널의 파일 종료
데이터베이스에서 네트워크 연결이 더 이상 없음을 알 수 있습니까?원인은 다음과 같습니다.
- 네트워크 문제 - 연결 오류 또는 방화벽 문제
- 사용자에게 서비스를 제공하는 데이터베이스의 서버 프로세스가 예기치 않게 중단되었습니다.
1) (계속) tahiti.oracle.com 에서 다음을 검색합니다.SQLNET.EXPIRE_TIME
구성 가능한 간격으로 네트워크 패킷을 정기적으로 보내는 sqlnet.or 매개 변수입니다. 이 매개 변수를 설정하면 방화벽이 연결이 활성 상태라고 믿게 됩니다.
1) (네트워크) 네트워크 관리자에게 문의하십시오(연결이 불안정할 수 있음).
2) 하기:alert.log
메시지가 .서버 프로세스가 실패하면 오류 메시지가 나타납니다.또한 지원팀이 문제를 식별할 수 있도록 추적 파일이 작성되었습니다.오류 메시지가 추적 파일을 참조합니다.
지원 문제는 적절한 CSI(고객 서비스 식별자)를 사용하여 metalink.oracle.com 에서 제기할 수 있습니다.
Validate Connection=true를 연결 문자열에 추가합니다.
자세한 내용은 이 블로그를 참조하십시오.
세부 정보: Oracle Connection 이후.Close() 실제 데이터베이스 연결이 종료되지 않습니다.연결 개체가 다시 연결 풀에 저장됩니다.연결 풀의 사용은 ODP.NET에 의해 암시됩니다.새 연결을 만들면 풀 중 하나가 표시됩니다.이 연결이 "아직 열려 있는" 경우 Oracle 연결.Open() 메서드는 실제로 새 연결을 만들지 않습니다.실제 연결이 끊어진 경우(어떤 이유로든) 처음 선택, 업데이트, 삽입 또는 삭제 시 오류가 발생합니다.
Validate Connection(연결 확인)을 사용하면 실제 연결이 Open() 메서드에서 검증됩니다.
일정 시간 후에 연결을 종료하는 방화벽이 없는지 확인합니다(이것이 유사한 문제의 원인이었습니다).
통신 채널의 파일 종료:
이 오류 중 하나는 데이터베이스가 열기 단계에 있을 때 로그를 작성하지 못했기 때문입니다.
솔루션은 데이터베이스가 ARCHIVELOG 또는 NOARCHIVELOG에서 실행 중인지 확인합니다.
사용을 확인하기 위해
select log_mode from v$database;
에 있는 ARCHIVELOG
로 바꾸려고 노력합니다.NOARCHIVELOG
sqlplus를 사용하여
- 시작 마운트
- 데이터베이스 보관 로그 변경;
- 열린 데이터베이스 변경
이것에 효과가 있다면,
할 수 한 후 를 그런 다플복조수로 할 수 . 플래시 복구 영역이 꽉 찼을 가능성이 있습니다. 그런 다음 플래시 복구 영역에 공간이 있는지 확인한 후 데이터베이스를ARCHIVELOG
Oracle 데이터베이스 서버의 공간이 부족하다는 실제 문제가 발생한 경우 이 오류 메시지가 애플리케이션 로그에 기록될 수 있습니다.
공간 문제를 수정한 후 이 특정 오류 메시지가 사라졌습니다.
다음 레지스트리 해킹을 시도할 수 있습니다.
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"DeadGWDetectDefault"=dword:00000001
"KeepAliveTime"=dword:00120000
만약 효과가 있다면, 그냥 계속해서 증가시키세요.KeepAliveTime
현재 2분으로 설정되어 있습니다.
이전에 언급한 기사는 좋습니다.http://forums.oracle.com/forums/thread.jspa?threadID=191750 (그것에 관한 한)
자주 실행되지 않는 경우(홈 페이지에서 실행하지 않음) 연결 풀링을 해제할 수 있습니다.
기사에 언급되지 않은 또 다른 "갓챠"가 있습니다.연결을 사용하여 가장 먼저 수행하려는 작업이 저장 프로시저를 호출하는 경우 ODP가 중단됩니다.!!!관리해야 할 오류 조건은 반환되지 않으며, 전체 보어 행!이 문제를 해결할 수 있는 유일한 방법은 연결 풀링을 끄는 것입니다.우리가 그렇게 하자 모든 문제가 사라졌습니다.
풀링은 어떤 상황에서는 좋지만, 모든 연결의 첫 번째 문 주변에서 복잡성이 증가하는 비용이 듭니다.
오류 처리 접근 방식이 그렇게 좋다면 ODP가 대신 처리하는 옵션으로 만드는 것은 어떨까요???
//먼저 마운트 모드 시작 마운트에서 데이터베이스 시작
//archivelog alter database noarchivelog 사용 안 함 // 그런 다음 db를 openalter database open에 넣습니다.
언급URL : https://stackoverflow.com/questions/83068/ora-03113-end-of-file-on-communication-channel-after-long-inactivity-in-asp-net
'source' 카테고리의 다른 글
정적 메소드 - 다른 메소드에서 메소드를 호출하는 방법은 무엇입니까? (0) | 2023.07.16 |
---|---|
Python 웹 프레임워크, WSGI 및 CGI의 적합성 (0) | 2023.07.16 |
PL/SQL 프로시저 이름 찾기 (0) | 2023.07.16 |
"int mask = ~0;"의 목적은 무엇입니까? (0) | 2023.07.16 |
SQL Server 데이터베이스 테이블에 데이터 테이블을 삽입하는 방법은 무엇입니까? (0) | 2023.07.16 |