source

ORA-03113: ASP.Net 앱에서 장시간 비활성화 후 통신 채널의 파일 종료

ittop 2023. 7. 16. 17:56
반응형

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. 네트워크 문제 - 연결 오류 또는 방화벽 문제
  2. 사용자에게 서비스를 제공하는 데이터베이스의 서버 프로세스가 예기치 않게 중단되었습니다.

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

반응형