轮询值守程序,长时间不调用数据库,再次调用报ORA-03135:连接失去联系错误

      前几天在服务器上做了一个轮询值守的小程序,负责搬运校验,第一天运行时没有任何问题。但是当程序经过一晚上没有数据库交互后,第二天再连ORACLE数据库就会报ORA-03135报错。

      通过多方查找,发现这并不是代码问题,而是Provider与数据库连接问题。在MSDN上,看到一个大神的回答,记录下备查。

      实际上,我们new一个连接的时候,是从数据库连接池里面拿到的连接,这些连接放在.net Provider里面。Conn.Close()并不是关闭了连接,而是把连接还给了连接池。现在的问题是Oracle Provider的问题,而不是代码的问题。程序很久没有跟数据库交互,数据库服务器端就把连接的Open状态关了,但是Provider没有及时处理,依然给了C#代码用,所以就抛出了这个异常。

      解决办法:不使用连接池,每次直连数据库,虽然不会出现这个问题,但是会有性能上的损失。

      在app.config的配置文件中,在DataSource=(XXXXX)这个字符串中,加入不使用连接池Pooling =false

      Data Source =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = XXXXXX)(PORT = 1521)))(CONNECT_DATA =(SID=XXXXXXX)(SERVER=DEDICATED)));Pooling =false;User ID=XXXX;Password=XXXXX;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值