it-swarm-ko.tech

ORA-03113 : ASP.Net 앱에서 오랫동안 사용하지 않으면 통신 채널의 파일 끝

IIS5의 ODAC/ODP.Net 드라이버 버전 10.1.0.301을 사용하여 IIS5의로드 밸런싱 된 (세션 상태를 사용하지 않는) ASP.Net 2.0 앱을 단일 Oracle 10g 서버로 다시 실행하고 있습니다. 오랜 시간 동안 활동이 없으면 (몇 시간) 응용 프로그램이 무작위로 보이는 것처럼 Oracle 예외가 발생합니다.

예외 : ORA-03113 : Oracle.DataAccess.Client.OracleException.HandleErrorHelper (Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx * pOpoSqlValCtx, Object src, String procedure)의 통신 채널에서 파일 끝 파일이 Oracle.DataAccess.Client에 있습니다. Oracle.DataAccess.Client.OracleCommand.System.Data.IDbCommand.ExecuteReader ()의 .OracleCommand.ExecuteReader (부울 리 쿼리, 부울 fillRequest, CommandBehavior 동작)

스택의 오라클 부분은 여기서 끝납니다.

우리는 모든 요청에 ​​대해 새로운 연결을 만들고, 적절한 연결 폐쇄를 보장하기 위해 try/catch/finally로 열기 및 닫기를 감싸고 있으며 모든 것은 using (OracleConnection yadayada) {...} 블록으로 싸여 있습니다. 이 문제는 비활성 상태로 회전 된 후 ASP.Net 응용 프로그램을 다시 시작할 때 연결되지 않은 것으로 나타납니다.

우리는 아직 문제를 스스로 재현하지 못했습니다. 생각,기도, 도움?


More : IT에서 확인하면 방화벽이 해당 서버 간의 연결을 끊도록 설정되어 있지 않습니다.

23
Greg Hurlman

ORA-03113 : 통신 채널의 파일 끝

데이터베이스가 네트워크 연결이 더 이상 없음을 알려줍니다. 그 이유는 다음과 같습니다.

  1. 네트워크 문제-연결 또는 방화벽 문제
  2. 서비스중인 데이터베이스의 서버 프로세스가 예기치 않게 종료되었습니다.

1) (firewall) tahiti.Oracle.com에서 SQLNET.EXPIRE_TIME. 이것은 구성 가능한 간격으로 네트워크 패킷을 정기적으로 전송하는 sqlnet.ora 매개 변수입니다. 즉, 설정하면 방화벽이 연결이 활성 상태라고 믿게됩니다.

1) (network) 네트워크 관리자에게 문의하십시오 (연결을 신뢰할 수 없음)

2) alert.log 오류입니다. 서버 프로세스가 실패하면 오류 메시지가 나타납니다. 또한 지원을 통해 문제를 식별 할 수 있도록 추적 파일이 작성되었습니다. 오류 메시지는 추적 파일을 참조합니다.

적절한 고객 서비스 식별자 (CSI)를 사용하여 metalink.Oracle.com 에서 지원 문제를 제기 할 수 있습니다.

19
mathewbutler

연결 문자열에 Validate Connection = true 를 추가하십시오.

자세한 내용은 이 블로그 를 참조하십시오.

DETAILS : OracleConnection.Close () 후에 실제 데이터베이스 연결이 종료되지 않습니다. 연결 개체는 연결 풀에 다시 놓입니다. 연결 풀 사용은 ODP.NET에 의해 암시됩니다. 새 연결을 만들면 풀 중 하나가 나타납니다. 이 연결이 "아직 열려 있으면"OracleConnection.Open () 메소드는 실제로 새 연결을 작성하지 않습니다. 어떤 이유로 든 실제 연결이 끊어지면 먼저 선택, 업데이트, 삽입 또는 삭제시 오류가 발생합니다.

연결 확인을 사용하면 Open () 메서드에서 실제 연결이 확인됩니다.

8
Christian13467

일정 시간이 지나면 연결을 종료하는 방화벽이 없는지 확인하십시오 (이것은 유사한 문제의 원인이었습니다).

5
hamishmcn

통신 채널의 파일 끝 :

이 오류의 과정 중 하나는 데이터베이스가 로그를 열 때 로그를 쓰지 못하기 때문입니다.

데이터베이스가 ARCHIVELOG 또는 NOARCHIVELOG로 실행 중인지 확인하십시오.

사용을 확인하기 위해

select log_mode from v$database;

ARCHIVELOG의 경우 NOARCHIVELOG로 변경해보십시오.

sqlplus를 사용하여

  • 스타트 업 마운트
  • 데이터베이스 noarchivelog 변경;
  • 데이터베이스 개방 변경;

그것이 효과가 있다면

그런 다음 플래시 복구 영역을 조정하여 플래시 복구 영역이 가득 찼을 수 있습니다.-> 플래시 복구 영역에 데이터베이스를 ARCHIVELOG로 변경할 수있는 공간이 있는지 확인한 후

4
Mathias Stanley

실제 문제가 Oracle 데이터베이스 서버에 공간이 부족한 경우 응용 프로그램 로그에이 오류 메시지가 표시 될 수 있습니다.

공간 문제를 해결 한 후이 특정 오류 메시지가 사라졌습니다.

3
Rajesh

이 레지스트리 해킹을 시도해 볼 수 있습니다.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"DeadGWDetectDefault"=dword:00000001
"KeepAliveTime"=dword:00120000

작동하면 KeepAliveTime를 계속 늘리십시오. 현재 2 분으로 설정되어 있습니다.

2
Ken Wren

앞서 언급 한 기사가 좋습니다. http://forums.Oracle.com/forums/thread.jspa?threadID=19175 (가는 한)

이것이 자주 실행되는 것이 아닌 경우 (홈 페이지에서하지 마십시오) 연결 풀링을 해제 할 수 있습니다.

이 기사에서 언급되지 않은 다른 "gotcha"가 있습니다. 연결과 관련하여 가장 먼저 시도하는 것이 저장 프로 시저를 호출하는 경우 ODP가 중단됩니다 !!!! 당신은 관리하기 위해 오류 조건을 다시받지 못할 것입니다. 이를 해결하는 유일한 방법은 연결 풀링을 끄는 것입니다. 일단 그렇게하면 모든 문제가 사라졌습니다.

풀링은 일부 상황에서는 좋지만 모든 연결의 첫 번째 설명에서 복잡성이 증가합니다.

오류 처리 접근 방식이 너무 좋으면 ODP가 우리를 위해 처리하는 옵션을 선택하지 않겠습니까?

0
Brad Bruce