我有长时间运行的Python可执行文件。在开始时使用cx_Oracle打开Oracle连接。经过超过45-60分钟的空闲连接-它得到了这个错误。有什么想法或特殊的设置需要在cx_Oracle?
发布于 2022-03-30 20:33:25
与其在应用程序中留下未使用的连接,不如考虑在不需要时关闭它,然后在需要时重新打开它。建议使用连接池,因为池可以处理一些潜在的故障,如您的,并将为您提供一个可用的连接。
在应用程序初始化时,启动池一次:
pool = cx_Oracle.SessionPool("username", pw,
"localhost/orclpdb1", min=0, max=4, increment=1)然后,获得连接,只有在需要时才能保持它:
with pool.acquire() as connection:
cursor = connection.cursor()
for result in cursor.execute(
"""select sys_context('userenv','sid') from dual"""):
print(result)with块的末尾将释放到池的连接。它不会关闭的。下次调用acquire()时,池可以检查连接是否仍然可用。如果不是,它会给你一个新的。由于这些检查,即使只有一个连接,池也是有用的。
请看我的博客始终使用连接池-以及如何使用连接池,其中大部分都适用于cx_Oracle。
但是,如果不想更改代码,请尝试设置Oracle参数EXPIRE_TIME,如Oracle文档中所示。这可以在不同的地方设置。在基于C的Oracle客户端(如cx_Oracle)中:
(EXPIRE_TIME=n)添加到连接描述符的说明部分。host/service?expire_time=n来使用。这可能并不总是有帮助,这取决于关闭连接的内容。
从根本上说,您应该/可以修复根本原因,这可能是防火墙超时,或者是DBA强加的用户资源或DB空闲时间限制。
https://stackoverflow.com/questions/71635261
复制相似问题