Linux (Red Hat 5.3 上の 10gR2) でホストされている Oracle データベースに接続する C# Windows IIS サーバー (Windows Server 2003) アプリケーションがあります。断続的に、Oracle は ORA-3113: end-of-file on communication channel エラーをスローします。これにより、C# の OracleConnection オブジェクトが台無しになります。次に、OracleConnection を使用しようとする新しい OracleCommands はすべて、接続が閉じられたと言って失敗します。
このエラーによって生成された Oracle トレース ファイルを確認し、問題をネットワーク ハードウェアの障害に切り分け、修正に取り組んでいます。
ただし、C# コードをより堅牢にし、その接続オブジェクトを閉じて使用しないことで、このエラーに適切に応答する必要があります。C# で例外をキャッチするのは簡単ですが、開発環境でネットワークの問題を再現して、コードが機能し、その後クリーンアップされることを証明することはできません。
try
{
oracleCommand.ExecuteNonQuery();
}
catch(OracleException exception)
{
if(exception.Code == 3113)
CloseAndCleanup();
}
テーブルに INSERT しようとすると ORA-3113 をスローする PL/SQL トリガーをテーブルにコーディングしようとしました。
CREATE OR REPLACE TRIGGER SCHEMA.TABLE
BEFORE DELETE OR INSERT OR UPDATE
ON SCHEMA.TABLE
FOR EACH ROW
DECLARE
CONNECTION_LOST_CONTACT EXCEPTION;
PRAGMA EXCEPTION_INIT (CONNECTION_LOST_CONTACT, -3113);
BEGIN
RAISE CONNECTION_LOST_CONTACT;
END;
これは正しいエラーをスローしますが、C# の OracleConnection オブジェクトを破損しません。コマンドを OracleConnection に送信することはできますが、動作します。
ORA-3113 エラーを正確にシミュレートするにはどうすればよいですか?