タイマー コントロールを使用していくつかのスケジュールされたタスクを実行する Windows サービスを開発しました。タイマー経過イベントは 5 分ごとに発生し、log4net アペンダーを使用して Oracle データベースにログ エントリが作成されます。
DB サーバーが夜間のコールド バックアップのすべての接続を閉じるまで、すべて正常に動作します。それ以来、DB 内のすべてのログが失われ、バックアップ プロセスに 30 分もかからないにもかかわらず、サービスが再起動されない限り何もログに記録されません。
他の投稿から、log4net は 1 つの接続のみを使用し、失われた場合は後続のすべてのログが破棄されることがわかりました。これを改善するために、構成で ReconnectOnError 属性を true に設定して使い始めました。しかし、残念ながら、問題はまだ残っています。バックアップ後もログは失われます。トレースを有効にしたところ、次のエラーが見つかりましたが、この問題を解決する方法がわかりません。
log4net:エラー [CustomAdoNetAppender] 例外がデータベースに書き込み中 Oracle.DataAccess.Client.OracleException ORA-03113: Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode、OracleConnection conn、String プロシージャ、IntPtr opsErrCtx、OpoSqlValCtx* pOpoSqlValCtx、Object src) で Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery () log4net.Appender.AdoNetAppender.SendBuffer(IDbTransaction dbTran、LoggingEvent[] イベント) で log4net.Appender.AdoNetAppender.SendBuffer(LoggingEvent[] イベント) で
と:
log4net:エラー [CustomAdoNetAppender] 例外がデータベースへの書き込み中 System.InvalidOperationException: 接続は、Oracle.DataAccess.Client.OracleConnection.BeginTransaction(IsolationLevel isolationLevel) at Oracle.DataAccess.Client.OracleConnection.BeginDbTransaction で既にローカルまたは分散トランザクションの一部になっています(IsolationLevel isolationLevel) System.Data.Common.DbConnection.System.Data.IDbConnection.BeginTransaction() で log4net.Appender.AdoNetAppender.SendBuffer(LoggingEvent[] イベント)
これに関するヘルプは大歓迎です!!