我使用版本10.1.0.301的ODAC/ODP.Net驱动程序在IIS5上运行负载平衡(不使用会话状态)ASP.Net 2.0应用程序,运行回单个Oracle 10g服务器.在长时间不活动(几个小时)之后,应用程序看似随机,将抛出Oracle异常:
例外:ORA-03113:结束文件在Oracle.DataAccess.Client.OracleException.HandleErrorHelper(的Int32 ERRCODE,康涅狄格州的OracleConnection,IntPtr的opsErrCtx,OpoSqlValCtx*pOpoSqlValCtx,对象的src,字符串过程)在Oracle.DataAccess.Client上的通信信道.OracleCommand.ExecuteReader(布尔重新查询,布尔fillRequest,行为的CommandBehavior)在Oracle.DataAccess.Client.OracleCommand.System.Data.IDbCommand.ExecuteReader()
...堆栈的Oracle部分在这里结束......
我们正在为每个请求创建新的连接,在try/catch/finally中包含open和close以确保正确的连接关闭,并且整个事务都包含在using(OracleConnection yadayada){...}块中.在停止不活动后,此问题似乎与重新启动ASP.Net应用程序无关.
我们还没有自己重现这个问题.思想,祈祷,帮助?
更多:通过IT检查,防火墙未设置为终止这些服务器之间的连接.
ORA-03113:通信信道上的文件结束
数据库是否让您知道网络连接不再存在.这可能是因为:
网络问题 - 连接错误或防火墙问题
服务于您的数据库上的服务器进程意外死亡.
对于1)(防火墙)搜索tahiti.oracle.com for SQLNET.EXPIRE_TIME.这是一个sqlnet.ora参数,它将定期以可配置的间隔发送网络数据包,即:设置这将使防火墙认为连接是活动的.
1)(网络)与您的网络管理员联系
对于2)检查alert.log是否存在错误,如果服务器进程失败,则此处将显示错误消息,并且将编写跟踪文件以启用支持以识别问题.错误消息将引用跟踪文件.
可以使用合适的客户服务标识符(CSI)在metalink.oracle.com上提出支持问题
将Validate Connection = true添加到连接字符串.
查看此博客以了解更多信息.
详细信息: 在OracleConnection.Close()之后,真正的数据库连接不会终止.连接对象放回连接池中.ODP.NET隐含了连接池的使用.如果您创建新连接,则会获得其中一个池.如果此连接"尚未打开",则OracleConnection.Open()方法不会真正创建新连接.如果真实连接中断(由于任何原因),则在首次选择,更新,插入或删除时会出现故障.
使用Validate Connection,可以在Open()方法中验证实际连接.
在一段时间后检查是否没有防火墙结束连接(这是我们遇到类似问题的原因)