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