访问 SQLAlchemy 连接套接字以防止防火墙超时

Get access to SQLAlchemy connection socket to prevent firewall timeouts

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

使用 SQL*网络选项 EXPIRE_TIME as documented in the cx_Oracle docEXPIRE_TIME 可用于防止防火墙终止空闲连接并调整 keepalive 超时。 EXPIRE_TIME 的一般建议是使用略小于终止期限一半的值。

详情:

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

对于较旧的客户端版本,您可以改用 ENABLE=BROKEN

还可以考虑将 connection pool 与 SQLAlchemy 一起使用,因为这将进行一些检查并在连接被终止时自动重新建立连接。池也非常适合频繁使用的长 运行 应用程序的性能。