python-3.x - 访问 SQLAlchemy 连接套接字以防止防火墙超时
问题描述
我的数据库连接有一些问题。它们似乎被网络中的某些防火墙突然切断,而在 TCP 级别解决此问题的一个好方法似乎是为特定的 TCP 套接字配置 keepalive。问题是我不知道如何以及是否可以访问由 SQLAlchemy 管理的连接。我正在使用它连接到 Oracle 数据库。这是通过使用 cx_Oracle 和 Oracle 的 Instant Client 来实现的,该客户端也已安装。
解决方案
使用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 的连接池,因为这将进行一些检查并在连接被终止时自动重新建立连接。池对于大量使用、长时间运行的应用程序的性能也非常有用。
推荐阅读
- javascript - Vuevalidate 插件 -$v 未在单个文件组件中定义
- typescript - 从编译中排除打字稿文件的某些部分?
- ios - 无法使用 Alamofire 从数组上传多个文件
- javafx - JavaFX - 通过场景构建器访问嵌套属性
- typescript - ts-jest 不识别 es6 导入
- sql - 如何将字符串行旋转到多列?
- android - 如何在没有 startService 的情况下使用 resultReceiver?
- c++11 - 从内部类继承并同时将其传递给外部模板?
- eclipse - 将 Codename One 4.4.0 作为 eclipse 插件安装时出错
- r - 将当前行与 r 中的后续行(按日期和组排序)进行比较