我开发了一个 Windows 服务,我在其中使用计时器控件来执行一些计划任务。计时器超时事件每 5 分钟发生一次,其中使用 log4net appender 将日志条目添加到 Oracle 数据库。
一切正常,直到数据库服务器关闭所有连接以进行夜间冷备份。从那时起,DB 中的所有日志都将丢失,除非重新启动服务,否则即使备份过程花费不到 30 分钟,也不会记录任何内容。
从其他帖子中,我发现 log4net 仅使用一个连接,如果丢失,则所有后续日志都将被丢弃。为了解决这个问题,我开始使用在其配置中设置为 true 的 ReconnectOnError 属性。但不幸的是,问题仍然存在。备份后日志仍然丢失。我启用了跟踪并发现了以下错误,但我不知道如何解决此问题。
log4net:错误 [CustomAdoNetAppender] 写入数据库时出现异常 Oracle.DataAccess.Client.OracleException ORA-03113:Oracle.DataAccess.Client.OracleException.HandleErrorHelper 通信通道上的文件结尾(Int32 errCode,OracleConnection conn,IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure) at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src) at Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery () 在 log4net.Appender.AdoNetAppender.SendBuffer(IDbTransaction dbTran, LoggingEvent[] events) 在 log4net.Appender.AdoNetAppender.SendBuffer(LoggingEvent[] events)
和:
log4net:错误 [CustomAdoNetAppender] 写入数据库时出现异常 System.InvalidOperationException:连接已经是 Oracle.DataAccess.Client.OracleConnection.BeginDbTransaction 的 Oracle.DataAccess.Client.OracleConnection.BeginTransaction(IsolationLevelisolationLevel) 的本地或分布式事务的一部分(IsolationLevelisolationLevel) 在 System.Data.Common.DbConnection.System.Data.IDbConnection.BeginTransaction() 在 log4net.Appender.AdoNetAppender.SendBuffer(LoggingEvent[] events)
对此高度赞赏的任何帮助!