首页 > 解决方案 > 访问 SQLAlchemy 连接套接字以防止防火墙超时

问题描述

我的数据库连接有一些问题。它们似乎被网络中的某些防火墙突然切断,而在 TCP 级别解决此问题的一个好方法似乎是为特定的 TCP 套接字配置 keepalive。问题是我不知道如何以及是否可以访问由 SQLAlchemy 管理的连接。我正在使用它连接到 Oracle 数据库。这是通过使用 cx_Oracle 和 Oracle 的 Instant Client 来实现的,该客户端也已安装。

标签: python-3.xoraclesqlalchemycx-oracle

解决方案


使用cx_Oracle 文档EXPIRE_TIME中记录的 SQL*Net 选项。可用于防止防火墙终止空闲连接并调整保活超时。EXPIRE_TIME 的一般建议是使用略小于终止期一半的值。EXPIRE_TIME

细节:

  • 使用 18c 客户端库,它可以添加(EXPIRE_TIME=n)DESCRIPTION连接描述符的部分(在应用程序中的完整连接描述符字符串中,或​​在 tnsnames.ora 文件中)。
  • 使用 19c 客户端库,它可以通过 Easy Connect 使用:host/service?expire_time=n.
  • 使用 21c 客户端库,它可以在客户端(即 Python 机器)sqlnet.ora 中使用。

您可以使用较旧的客户端版本ENABLE=BROKEN

还可以考虑使用带有 SQLAlchemy 的连接池,因为这将进行一些检查并在连接被终止时自动重新建立连接。池对于大量使用、长时间运行的应用程序的性能也非常有用。


推荐阅读