Я не являюсь экспертом ни в Oracle, ни в Python, поэтому, возможно, ответ очевиден, но я так и не смог найти ответ на свою проблему на форумах.
У меня есть SSH-соединение с базой данных Oracle 19c на SQL. разработчик и DBeaver, но я не могу подключиться к Python.
Я пробовал многое, например, проверять, нужен ли толстый режим, но получал разные ошибки.
В тонком режиме туннель SSH создавался, но при соединении Oracle возникли ошибки.
В толстом режиме оно зависало.
Фрагменты кода приведены ниже.
Есть ли у вас какие-либо идеи, в чем проблема и какое может быть решение?
Спасибо
Тонкий режим:
oracledb.exceptions.OperationalError: DPY-6005: cannot connect to database (CONNECTION_ID=rid).
[WinError 10061] No connection could be made because the target machine actively refused it
DEBUG
.transport:[chan 0] Sesch channel 0 request ok
DEBUG
.transport:[chan 0] Sesch channel 0 request ok
DEBUG
.transport:[chan 0] Unhandled channel request "[email protected]"
Traceback (most recent call last):
File "D:\Users\ssh.py", line 1995, in
DEBUG
.transport:[chan 0] EOF received (0)
DEBUG
.transport:[chan 0] EOF sent (0)
main()
File "D:\Users\ssh.py", line 402, in main
with SSHTunnel(
File "D:\Users\ssh.py", line 333, in enter
resp = self.channel.recv(4096).decode('utf-8')
^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\paramiko\channel.py", line 697, in recv
out = self.in_buffer.read(nbytes, self.timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\paramiko\buffered_pipe.py", line 150, in read
self._cv.wait(timeout)
File "C:\Python312\Lib\threading.py", line 355, in wait
waiter.acquire()
KeyboardInterrupt
DEBUG.transport in transport thread
Модифицированный код с помощью SSHTunnel:
Вот соединительная часть кода:< /p>
Server connected via SSH
DEBUG:paramiko.transport:[chan 0] Max packet in: 32768 bytes
Connected to Oracle
schema origi: JOGADMIN
DEBUG:paramiko.transport:Received global request "[email protected]"
DEBUG:paramiko.transport:Rejecting "[email protected]" global request from server.
DEBUG:paramiko.transport:Debug msg: b'/home/opc/.ssh/authorized_keys:1: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
DEBUG:paramiko.transport:[chan 0] Max packet out: 32768 bytes
DEBUG:paramiko.transport:Secsh channel 0 opened.
DEBUG:paramiko.transport:[chan 0] EOF sent (0)
DEBUG:paramiko.transport:Dropping user packet because connection is dead.
DEBUG:paramiko.transport:Dropping user packet because connection is dead.
DEBUG:paramiko.transport:EOF in transport thread
Traceback (most recent call last):
File "src\\oracledb\\impl/thin/connection.pyx", line 279, in oracledb.thin_impl.ThinConnImpl._connect_with_address
File "src\\oracledb\\impl/thin/protocol.pyx", line 242, in oracledb.thin_impl.Protocol._connect_phase_one
File "src\\oracledb\\impl/thin/protocol.pyx", line 400, in oracledb.thin_impl.Protocol._process_message
File "src\\oracledb\\impl/thin/protocol.pyx", line 379, in oracledb.thin_impl.Protocol._process_message
File "src\\oracledb\\impl/thin/messages.pyx", line 1875, in oracledb.thin_impl.ConnectMessage.process
File "C:\Python312\Lib\site-packages\oracledb\errors.py", line 182, in _raise_err
raise error.exc_type(error) from cause
oracledb.exceptions.OperationalError: DPY-6003: SID "db.oraclevcn.com" is not registered with the listener at host "127.0.0.1" port 1522. (Similar to ORA-12505)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 146, in __init__
self._dbapi_connection = engine.raw_connection()
^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 3300, in raw_connection
return self.pool.connect()
^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\sqlalchemy\pool\base.py", line 449, in connect
return _ConnectionFairy._checkout(self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\sqlalchemy\pool\base.py", line 1263, in _checkout
fairy = _ConnectionRecord.checkout(pool)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\sqlalchemy\pool\base.py", line 712, in checkout
rec = pool._do_get()
^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\sqlalchemy\pool\impl.py", line 179, in _do_get
with util.safe_reraise():
File "C:\Python312\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 146, in __exit__
raise exc_value.with_traceback(exc_tb)
File "C:\Python312\Lib\site-packages\sqlalchemy\pool\impl.py", line 177, in _do_get
return self._create_connection()
^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\sqlalchemy\pool\base.py", line 390, in _create_connection
return _ConnectionRecord(self)
^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\sqlalchemy\pool\base.py", line 674, in __init__
self.__connect()
File "C:\Python312\Lib\site-packages\sqlalchemy\pool\base.py", line 900, in __connect
with util.safe_reraise():
File "C:\Python312\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 146, in __exit__
raise exc_value.with_traceback(exc_tb)
File "C:\Python312\Lib\site-packages\sqlalchemy\pool\base.py", line 896, in __connect
self.dbapi_connection = connection = pool._invoke_creator(self)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\sqlalchemy\engine\create.py", line 643, in connect
return dialect.connect(*cargs, **cparams)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\sqlalchemy\engine\default.py", line 620, in connect
return self.loaded_dbapi.connect(*cargs, **cparams)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\oracledb\connection.py", line 1158, in connect
return conn_class(dsn=dsn, pool=pool, params=params, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\site-packages\oracledb\connection.py", line 541, in __init__
impl.connect(params_impl)
File "src\\oracledb\\impl/thin/connection.pyx", line 381, in oracledb.thin_impl.ThinConnImpl.connect
File "src\\oracledb\\impl/thin/connection.pyx", line 377, in oracledb.thin_impl.ThinConnImpl.connect
File "src\\oracledb\\impl/thin/connection.pyx", line 337, in oracledb.thin_impl.ThinConnImpl._connect_with_params
File "src\\oracledb\\impl/thin/connection.pyx", line 318, in oracledb.thin_impl.ThinConnImpl._connect_with_description
File "src\\oracledb\\impl/thin/connection.pyx", line 284, in oracledb.thin_impl.ThinConnImpl._connect_with_address
File "C:\Python312\Lib\site-packages\oracledb\errors.py", line 182, in _raise_err
raise error.exc_type(error) from cause
oracledb.exceptions.OperationalError: DPY-6005: cannot connect to database (CONNECTION_ID=53uh4nd==).
DPY-6003: SID "db.oraclevcn.com" is not registered with the listener at host "127.0.0.1" port 1522. (Similar to ORA-12505)
Я видел в документации sshtunnel, что он использует cx_oracle, но он недоступен в более новых версиях Python, доступен только oracledb. В других случаях они были взаимозаменяемыми, возможно, здесь это не работает.
Я не являюсь экспертом ни в Oracle, ни в Python, поэтому, возможно, ответ очевиден, но я так и не смог найти ответ на свою проблему на форумах. У меня есть SSH-соединение с базой данных Oracle 19c на SQL. разработчик и DBeaver, но я не могу подключиться к Python. Я пробовал многое, например, проверять, нужен ли толстый режим, но получал разные ошибки. В тонком режиме туннель SSH создавался, но при соединении Oracle возникли ошибки. В толстом режиме оно зависало. Фрагменты кода приведены ниже. Есть ли у вас какие-либо идеи, в чем проблема и какое может быть решение? Спасибо Тонкий режим: [code]class SSHTunnel:
# Establish the tunnel to the remote database self.forward_tunnel = self.client.get_transport().open_channel( "direct-tcpip", (self.remote_bind_host, self.remote_bind_port), ('127.0.0.1', self.local_bind_port) )
logging.debug(f"SSH Tunnel established on local port {self.local_bind_port}") return self
def __exit__(self, exc_type, exc_val, exc_tb): logging.debug("Tearing down SSH Tunnel") if self.forward_tunnel: self.forward_tunnel.close() if self.client: self.client.close()
with SSHTunnel(ssh_host, ssh_port, ssh_user, ssh_key_file,remote_bind_host, remote_bind_port, local_bind_port) as ssh_tunnel: with OracleConnection(oracle_user, oracle_password, ssh_tunnel.local_bind_port, oracle_service_name) as connection: logging.debug("Successfully connected to the Oracle database!")
cursor = connection.cursor() cursor.execute("SELECT * FROM some_table") for row in cursor: print(row)
# Close the cursor cursor.close()
if __name__ == "__main__": main() [/code] Ошибки: [code]oracledb.exceptions.OperationalError: DPY-6005: cannot connect to database (CONNECTION_ID=rid). [WinError 10061] No connection could be made because the target machine actively refused it
logging.debug(f"SSH Tunnel established on local port {self.local_bind_port}") return self
def __exit__(self, exc_type, exc_val, exc_tb): logging.debug("Tearing down SSH Tunnel") if self.forward_tunnel: self.forward_tunnel.close() if self.channel: self.channel.close() if self.client: self.client.close()
with SSHTunnel(ssh_host, ssh_port, ssh_user, ssh_key_file,remote_bind_host, remote_bind_port, local_bind_port) as ssh_tunnel: with OracleConnection(oracle_user, oracle_password, ssh_tunnel.local_bind_port, oracle_service_name) as connection: logging.debug("Successfully connected to the Oracle database!")
cursor = connection.cursor() cursor.execute("SELECT * FROM some_table") for row in cursor: print(row)
# Close the cursor cursor.close()
if __name__ == "__main__": main()
[/code] Ошибки: [code]DEBUG .transport:[chan 0] Sesch channel 0 request ok DEBUG .transport:[chan 0] Sesch channel 0 request ok DEBUG .transport:[chan 0] Unhandled channel request "[email protected]" Traceback (most recent call last): File "D:\Users\ssh.py", line 1995, in DEBUG .transport:[chan 0] EOF received (0) DEBUG .transport:[chan 0] EOF sent (0) main() File "D:\Users\ssh.py", line 402, in main with SSHTunnel( File "D:\Users\ssh.py", line 333, in enter resp = self.channel.recv(4096).decode('utf-8') ^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Python312\Lib\site-packages\paramiko\channel.py", line 697, in recv out = self.in_buffer.read(nbytes, self.timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Python312\Lib\site-packages\paramiko\buffered_pipe.py", line 150, in read self._cv.wait(timeout) File "C:\Python312\Lib\threading.py", line 355, in wait waiter.acquire() KeyboardInterrupt DEBUG.transport in transport thread
[/code]
[b]Модифицированный код с помощью SSHTunnel:[/b] Вот соединительная часть кода:< /p> [code]import oracledb import paramiko import sshtunnel from sshtunnel import SSHTunnelForwarder #Run pip install sshtunnel from sqlalchemy.orm import sessionmaker #Run pip install sqlalchemy from sqlalchemy import create_engine, text import psycopg2 import os import time import logging
Session = sessionmaker(bind=engine) print('Connected to Oracle') session = Session()
result = session.execute(text("SELECT * FROM all_users")) result_exists = result.fetchone()[0] session.close()
if __name__ == "__main__": main() [/code] И завершающая часть отладки + ошибки: [code]Server connected via SSH DEBUG:paramiko.transport:[chan 0] Max packet in: 32768 bytes Connected to Oracle schema origi: JOGADMIN DEBUG:paramiko.transport:Received global request "[email protected]" DEBUG:paramiko.transport:Rejecting "[email protected]" global request from server. DEBUG:paramiko.transport:Debug msg: b'/home/opc/.ssh/authorized_keys:1: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding' DEBUG:paramiko.transport:[chan 0] Max packet out: 32768 bytes DEBUG:paramiko.transport:Secsh channel 0 opened. DEBUG:paramiko.transport:[chan 0] EOF sent (0) DEBUG:paramiko.transport:Dropping user packet because connection is dead. DEBUG:paramiko.transport:Dropping user packet because connection is dead. DEBUG:paramiko.transport:EOF in transport thread Traceback (most recent call last): File "src\\oracledb\\impl/thin/connection.pyx", line 279, in oracledb.thin_impl.ThinConnImpl._connect_with_address File "src\\oracledb\\impl/thin/protocol.pyx", line 242, in oracledb.thin_impl.Protocol._connect_phase_one File "src\\oracledb\\impl/thin/protocol.pyx", line 400, in oracledb.thin_impl.Protocol._process_message File "src\\oracledb\\impl/thin/protocol.pyx", line 379, in oracledb.thin_impl.Protocol._process_message File "src\\oracledb\\impl/thin/messages.pyx", line 1875, in oracledb.thin_impl.ConnectMessage.process File "C:\Python312\Lib\site-packages\oracledb\errors.py", line 182, in _raise_err raise error.exc_type(error) from cause oracledb.exceptions.OperationalError: DPY-6003: SID "db.oraclevcn.com" is not registered with the listener at host "127.0.0.1" port 1522. (Similar to ORA-12505)
The above exception was the direct cause of the following exception:
Traceback (most recent call last): File "C:\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 146, in __init__ self._dbapi_connection = engine.raw_connection() ^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 3300, in raw_connection return self.pool.connect() ^^^^^^^^^^^^^^^^^^^ File "C:\Python312\Lib\site-packages\sqlalchemy\pool\base.py", line 449, in connect return _ConnectionFairy._checkout(self) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Python312\Lib\site-packages\sqlalchemy\pool\base.py", line 1263, in _checkout fairy = _ConnectionRecord.checkout(pool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Python312\Lib\site-packages\sqlalchemy\pool\base.py", line 712, in checkout rec = pool._do_get() ^^^^^^^^^^^^^^ File "C:\Python312\Lib\site-packages\sqlalchemy\pool\impl.py", line 179, in _do_get with util.safe_reraise(): File "C:\Python312\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 146, in __exit__ raise exc_value.with_traceback(exc_tb) File "C:\Python312\Lib\site-packages\sqlalchemy\pool\impl.py", line 177, in _do_get return self._create_connection() ^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Python312\Lib\site-packages\sqlalchemy\pool\base.py", line 390, in _create_connection return _ConnectionRecord(self) ^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Python312\Lib\site-packages\sqlalchemy\pool\base.py", line 674, in __init__ self.__connect() File "C:\Python312\Lib\site-packages\sqlalchemy\pool\base.py", line 900, in __connect with util.safe_reraise(): File "C:\Python312\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 146, in __exit__ raise exc_value.with_traceback(exc_tb) File "C:\Python312\Lib\site-packages\sqlalchemy\pool\base.py", line 896, in __connect self.dbapi_connection = connection = pool._invoke_creator(self) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Python312\Lib\site-packages\sqlalchemy\engine\create.py", line 643, in connect return dialect.connect(*cargs, **cparams) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Python312\Lib\site-packages\sqlalchemy\engine\default.py", line 620, in connect return self.loaded_dbapi.connect(*cargs, **cparams) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Python312\Lib\site-packages\oracledb\connection.py", line 1158, in connect return conn_class(dsn=dsn, pool=pool, params=params, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Python312\Lib\site-packages\oracledb\connection.py", line 541, in __init__ impl.connect(params_impl) File "src\\oracledb\\impl/thin/connection.pyx", line 381, in oracledb.thin_impl.ThinConnImpl.connect File "src\\oracledb\\impl/thin/connection.pyx", line 377, in oracledb.thin_impl.ThinConnImpl.connect File "src\\oracledb\\impl/thin/connection.pyx", line 337, in oracledb.thin_impl.ThinConnImpl._connect_with_params File "src\\oracledb\\impl/thin/connection.pyx", line 318, in oracledb.thin_impl.ThinConnImpl._connect_with_description File "src\\oracledb\\impl/thin/connection.pyx", line 284, in oracledb.thin_impl.ThinConnImpl._connect_with_address File "C:\Python312\Lib\site-packages\oracledb\errors.py", line 182, in _raise_err raise error.exc_type(error) from cause oracledb.exceptions.OperationalError: DPY-6005: cannot connect to database (CONNECTION_ID=53uh4nd==). DPY-6003: SID "db.oraclevcn.com" is not registered with the listener at host "127.0.0.1" port 1522. (Similar to ORA-12505) [/code] Я видел в документации sshtunnel, что он использует cx_oracle, но он недоступен в более новых версиях Python, доступен только oracledb. В других случаях они были взаимозаменяемыми, возможно, здесь это не работает.
Ниже приведены используемые зависимости (версия базы данных Oracle 19C)
com.oracle.database.jdbc/ojdbc8/19.8.0.0
com.oracle.database.messaging/aqapi/19.3. 0.0
и появляется следующее сообщение об ошибке.
Ошибка при соединении JMS или настройка...
Я пытаюсь** изменить размер изображений**, содержащихся в столбце BLOB в таблице, с помощью Java-кода.
когда изображения большие, около 157893 в длину, выдается ошибка NullPointVariable .
это код, который я использую:
import java.lang.*;
import...
Я следую руководству по установке Oracle Database 19c в Oracle Linux 9 (OL9).
Если я запускаю установщик (runInstaller) от имени пользователя без полномочий root, я получаю ошибка в разрешении отклонена.
Но если я запущу его с помощью sudo, я получу...
У меня есть система Oracle 19c в Linux с включенной аутентификацией krb5 с использованием Windows AD KDC. Доступ sqlplus и jdbc работает нормально. Когда я пытался протестировать с помощью ucp (ucp11.jar, ojdbc11.jar), я столкнулся с ORA-12631,...
У меня есть система Oracle 19c в Linux с включенной аутентификацией krb5 с использованием Windows AD KDC. Доступ sqlplus и jdbc работает нормально. Когда я пытался протестировать с помощью ucp (ucp11.jar, ojdbc11.jar), я столкнулся с ORA-12631,...