24

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.OracleCommand.System.Data.IDbCommand.ExecuteReader() での .OracleCommand.ExecuteReader(Boolean requery、Boolean fillRequest、CommandBehavior 動作)

...スタックのオラクル部分はここで終わります...

リクエストごとに新しい接続を作成し、オープンとクローズを try/catch/finally でラップして適切な接続クローズを確保し、すべてを using (OracleConnection yadayada) {...} ブロックでラップします。この問題は、非アクティブのためにスピン ダウンされた後の ASP.Net アプリケーションの再起動に関連しているようには見えません。

私たちはまだ問題を再現していません。考え、祈り、助けますか?


詳細: IT 部門に確認したところ、これらのサーバー間の接続を切断するようにファイアウォールが設定されていません。

4

8 に答える 8

19

ORA-03113: 通信チャネルでファイルの終わりです

ネットワーク接続がなくなったことを知らせるデータベースです。これには次の理由が考えられます。

  1. ネットワークの問題 - 接続不良、またはファイアウォールの問題
  2. サービスを提供しているデータベースのサーバー プロセスが予期せず終了しました。

1) (ファイアウォール) については、tahiti.oracle.com で を検索してくださいSQLNET.EXPIRE_TIME。これは、構成可能な間隔でネットワーク パケットを定期的に送信する sqlnet.ora パラメータです。つまり、これを設定すると、ファイアウォールは接続が有効であると認識します。

1) ( network ) については、ネットワーク管理者に相談してください (接続が信頼できない可能性があります)

2) のalert.logエラーを確認します。サーバー プロセスが失敗した場合は、エラー メッセージが表示されます。また、サポートが問題を特定できるように、トレース ファイルが書き込まれます。エラー メッセージは、トレース ファイルを参照します。

サポートの問題は、適切なカスタマー サービス ID (CSI)を使用して、 metalink.oracle.comで提起できます。

于 2008-09-18T11:56:28.847 に答える
5

一定時間後に接続を終了するファイアウォールがないことを確認します (これは、私たちが経験した同様の問題の原因でした)

于 2008-09-17T14:00:20.350 に答える
4

通信チャネルのファイルの終わり:

このエラーの過程の 1 つは、データベースが開く段階でログを書き込めないことが原因です。

解決策 データベースが ARCHIVELOG または NOARCHIVELOG で実行されているかどうかを確認します

使用を確認する

select log_mode from v$database;

オンになっている場合は、ARCHIVELOGに変更してみてくださいNOARCHIVELOG

sqlplus を使用して

  • 起動マウント
  • データベース noarchivelog を変更します。
  • データベースのオープンを変更します。

これでうまくいくなら

次に、フラッシュリカバリ領域がいっぱいになっている可能性があるため、フラッシュリカバリ領域を調整できます->フラッシュリカバリ領域にスペースがあることを確認した後、データベースを次のように変更できますARCHIVELOG

于 2013-03-12T14:45:31.850 に答える
2

このレジストリ ハックを試すことができます。

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

それが機能する場合は、 を増やし続けてKeepAliveTimeください。現在は 2 分間に設定されています。

于 2008-09-18T15:51:11.857 に答える
0

前述の記事は良いです。http://forums.oracle.com/forums/thread.jspa?threadID=191750 (それが行く限り)

これが頻繁に実行されるものでない場合(ホームページでは実行しないでください)、接続プールをオフにすることができます。

記事に記載されていないもう1つの「落とし穴」があります。接続で最初に実行しようとすることがストアドプロシージャを呼び出すことである場合、ODPはハングします!!!! あなたは管理するためにエラー状態を取り戻すことはありません、ただフルボアハング!これを修正する唯一の方法は、接続プールをオフにすることです。それを行うと、すべての問題が解決しました。

プーリングは状況によっては適切ですが、すべての接続の最初のステートメントの複雑さが増すという犠牲を払っています。

エラー処理のアプローチが非常に優れている場合は、ODPがエラー処理を行うためのオプションにしないのはなぜですか????

于 2008-10-09T12:13:58.500 に答える