背景:

我用python  Oracle.SessionPool() 封装了连接池。启动项目后,一段时间内可以使用,

过几个小时不使用,再触发,连接池的连接就失效了。

原因:

我碰到的实际例子如下:
Web服务器与数据库之间有一个安全防火墙,这个防火墙会定期检查连接,如果某个连接长时间(30分钟)没有数据流过,就会被关闭。这种关闭使得检测连接还是打开的,却不能执行sql语句。但是如果连接一直有数据流动,就不会被关闭。
设置定期检测后,比较好解决了这个问题。

Oracle的实现上有这样一个设置,即给一个测试语句来测试数据库连接。一般都用 select 1 from dual 。 另外还有一个设置就是多长时间检测一次。一般设置15分钟。
也就是说Oracle的实现的方法,会自动定期用这个语句去检测数据库的连接,一旦检测到连接失败,就关闭连接并重新建立连接。
因此我建议楼主可以考虑这样的机制。毕竟网络连接是完全有可能断开的。

具体的解决方案,还是要自己探索的,我也没搞定。

原文地址:

连接池问题,时间长了连接就不能用了。-CSDN论坛


Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐