Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Connect() hangs with SSH tunnels and 11g database

Abierto
#502 5 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
45/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
python
Área
databases

Línea de trabajo

Comienza con la reproducción de Python proporcionada usando SSHTunnelForwarder, oracledb.connect() y Oracle 11g; después, compárala con los casos funcionales con 19c y con un túnel externo. Comprueba las combinaciones indicadas de cliente, Python, SID y credenciales. Se considera terminado cuando se haya identificado y corregido la causa del bloqueo, preservando las conexiones exitosas y los errores esperados.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug
  1. What versions are you using?
    Python 3.13.3 (also tried with 3.11)
    Oracledb 3.1.1 (also tried 3.0.0 and 2.5.1)
    Oracle database 11g
    Oracle instant client 18.5 (also tried with 12.2)

    platform.platform: Windows-11-10.0.26100-SP0
    sys.maxsize > 2**32: True
    platform.python_version: 3.13.3
    oracledb.version: 3.1.1

  2. Is it an error or a hang or a crash? Hang

  3. What error(s) or behavior you are seeing?
    While trying to connect to 11g databases through SSHtunnels, oracledb.connect() hangs and doesn't return anything.
    I tried it on multiple tunnels/databases combinaisons, while mixing oracledb / instantclient / python versions.

    If I open the tunnel through putty, oracledb.connect works.
    If I open the tunnel through another script, oracledb.connect works. (!)
    If I try to open a tunnel and connect to a 19c database, it works
    If I do the same thing using python 3.9 and cx_oracle, it works.

    If I provide a wrong username or password, I get an (expected) error.
    If I provide a wrong SID, I get an (expected) error.

    I do see an inactive connection in my v$session linked to my script.

    I tried everything I could think of and do not understand what I'm missing.

  4. Does your application call init_oracle_client()? Yes, I tried with instant client versions 11.2, 12.1, 18.5
    I had success accessing a 19c db using instant client 21.18 through the same tunnel (and same script)

  5. Include a runnable Python script that shows the problem.

from sshtunnel import SSHTunnelForwarder
import oracledb

# ssh config
ssh_host = "###_tunnel.com"
ssh_port = 21
ssh_username = "ssh_user"
ssh_password = "ssh_psw"

# db config
oracle_host = "ip.of.my.db"
oracle_port = 1521
oracle_sid = "DB_SID"
oracle_user = "DB_USER"
oracle_password = "DB_PSW"

#oracle_client_path = r"C:\instant_client18c\instantclient-basic-windows.x64-18.5.0.0.0dbru\instantclient_18_5"
oracle_client_path = r"C:\instant_client11g\instantclient-basic-windows.x64-11.2.0.4.0\instantclient_11_2"
oracledb.init_oracle_client(lib_dir=oracle_client_path)
print("Thin mode enabled?", oracledb.is_thin_mode())

try:
    with SSHTunnelForwarder(
            (ssh_host, ssh_port),
            ssh_username=ssh_username,
            ssh_password=ssh_password,
            remote_bind_address=(oracle_host, oracle_port),
    ) as tunnel:
        print(f"binding on {tunnel.local_bind_host}:{tunnel.local_bind_port}")
        print(oracledb.clientversion())
        param = oracledb.ConnectParams(
            user=oracle_user,
            password=oracle_password,
            host="localhost",
            port=tunnel.local_bind_port,
            sid=oracle_sid,
        )
        with oracledb.connect(params=param) as connection:
            print("connected to Oracle 11.2!") # this never prints for tunnel + 11g
            with connection.cursor() as cursor:
                cursor.execute("SELECT 'query success' AS TEST FROM dual")
                result = cursor.fetchone()
                print(result[0])

except Exception as e:
    print(f"Error : {e}")

Lenguaje dominante
Python
Estrellas
454
Forks
119
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de oracle/python-oracledb

Todos los issues de oracle/python-oracledb

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.