【问题标题】:python-oracledb thin client returns DPY-6000python-oracledb 瘦客户端返回 DPY-6000
【发布时间】:2023-01-04 03:23:11
【问题描述】:

我正在尝试在 OCI Ampere 节点上运行打包在 Docker 容器中的 Python 应用程序。

环境:

  • 基本图像:python:3.10.9-slim使用buildx构建arm64
  • 客户端库:oracledb==1.2.1
  • Docker 版本:20.10.22, build 3a2c30b
  • Docker 主机操作系统:5.4.17-2136.311.6.1.el8uek.aarch64

但是,当应用程序尝试使用瘦客户端连接到自治事务处理数据库时,它返回以下错误:

File "/app/utils/db_connection_managers/oracle_connection_manager.py", line 13, in __init__
    self.db_conn = oracledb.connect(
  File "/usr/local/lib/python3.10/site-packages/oracledb/connection.py", line 1013, in connect
    return conn_class(dsn=dsn, pool=pool, params=params, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/oracledb/connection.py", line 135, in __init__
    impl.connect(params_impl)
  File "src/oracledb/impl/thin/connection.pyx", line 318, in oracledb.thin_impl.ThinConnImpl.connect
  File "src/oracledb/impl/thin/connection.pyx", line 206, in oracledb.thin_impl.ThinConnImpl._connect_with_params
  File "src/oracledb/impl/thin/connection.pyx", line 177, in oracledb.thin_impl.ThinConnImpl._connect_with_description
  File "src/oracledb/impl/thin/connection.pyx", line 105, in oracledb.thin_impl.ThinConnImpl._connect_with_address
  File "src/oracledb/impl/thin/connection.pyx", line 101, in oracledb.thin_impl.ThinConnImpl._connect_with_address
  File "src/oracledb/impl/thin/protocol.pyx", line 168, in oracledb.thin_impl.Protocol._connect_phase_one
  File "src/oracledb/impl/thin/protocol.pyx", line 344, in oracledb.thin_impl.Protocol._process_message
  File "src/oracledb/impl/thin/protocol.pyx", line 323, in oracledb.thin_impl.Protocol._process_message
  File "src/oracledb/impl/thin/messages.pyx", line 1676, in oracledb.thin_impl.ConnectMessage.process
  File "/usr/local/lib/python3.10/site-packages/oracledb/errors.py", line 111, in _raise_err
    raise exc_type(_Error(message)) from cause
oracledb.exceptions.OperationalError: DPY-6000: cannot connect to database. Listener refused connection. (Similar to ORA-12506)

这表明客户端能够连接到数据库(即没有连接/网络问题),但连接请求被服务器主动拒绝。

我在我的 Mac(英特尔)上运行相同的容器,使用相同的 dockerfile(显然是为 amd64 构建的)和相同的连接细节,没有任何问题。

in the documentation 这种行为有一个提示,但我不确定它如何/为什么适用于我的案例。具体来说,它不会在我的 Intel Mac 上运行的容器中引起问题,但它是 arm64 容器在 A1 节点上运行时的一个因素。

我是在忽略某些事情还是试图做一些规范不支持的事情?

【问题讨论】:

  • 嗨,巴巴克。另一种可能产生该错误的情况是,当您的数据库上有 ACL 但您的客户端不在允许列表中时。
  • 你完全正确,亚辛。为了使用瘦客户端,我在我的 ATP 实例上设置了 ACL,它被设置为我家的 IP 地址!非常感谢您的提示!

标签: python docker arm64 oracle-cloud-infrastructure oracle-autonomous-db


【解决方案1】:

正如 Yasin B 正确指出的那样,问题是由 ATP 实例上 ACL 的现有配置引起的,其中不包括 A1 节点的公共 IP 地址。调整ACL后问题解决。

【讨论】:

    猜你喜欢
    • 2023-02-25
    • 1970-01-01
    • 2014-07-12
    • 2010-12-18
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 2019-07-20
    相关资源
    最近更新 更多