Python:无法连接到 oracle db ORA-12537:TNS:连接已关闭

问题描述 投票:0回答:1

我正在尝试在mac系统中连接oracle数据库。

我的团队通常使用 Java 进行开发。我们通常这样做是为了在java中连接db。我们连接到 ssh 隧道,它允许我们连接到远程主机。我们有oracle db wallet,我们提到了属性文件。

因此,在 ssh 隧道和钱包的帮助下,我也尝试在 python 中进行连接。在浏览了互联网上的各种资源后,我创建了以下代码。

import oracledb
import os


# Values
local_port = 1522
service_name = "mydb_high"
username = "read_only"
password = "pwd"
wallet_path = "/path/to/wallet/folder"
lib_dir = '/path/to/oracle_client/folder'

# Set the TNS_ADMIN environment variable to your wallet directory
os.environ["TNS_ADMIN"] = wallet_path

# Initialise Oracle Client
try:
    oracledb.init_oracle_client(lib_dir=lib_dir)
    
except Exception as e:
    print("Error initializing Oracle Client:", e)

dsn = "127.0.0.1:1522/" + service_name

try:
    # Connect to the database
    
    connection = oracledb.connect(
        user=username,
        password=password,
        dsn=dsn
    )
    
    print("Connected to Oracle Database")

    # Create a cursor object to execute queries
    cursor = connection.cursor()

    # test the connection
    cursor.execute("SELECT sysdate FROM dual")
    result = cursor.fetchone()
    print("Current Date/Time from Oracle DB:", result[0])

except oracledb.DatabaseError as e:
    error, = e.args
    print(f"Database connection failed: {error.message}")

finally:
    if 'connection' in locals() and connection:
        connection.close()
        print("Connection closed.")

当我运行上面的代码时,我收到此消息 ORA-12537:TNS:连接已关闭。我尝试在线查找错误,但所有解决方案都表明它与连接字符串和不正确的钱包文件有关。但相同的钱包文件对于 sqldeveloper 和 java 应用程序来说可以完美运行。

其中一个解决方案要求我从终端使用 sqlplus 测试 oracle_client 连接。

sqlplus 127.0.0.1:1522/mydb_high

当我尝试时,我收到此错误。

ORA-12162:TNS:网络服务名称指定不正确

我的 sqlnet.ora 文件存在于钱包目录中。看起来像这样。

WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="?/network/admin")))
SSL_SERVER_DN_MATCH=no

我什至用这个更新了它,

WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="/path/to/wallet/folder")))
SSL_SERVER_DN_MATCH=yes

这也没有帮助。

你能帮我解决这个问题吗?

python oracle-database sqlplus python-oracledb
1个回答
0
投票

ORA-12537:TNS:当 Oracle 客户端无法与 Oracle 数据库建立或维持连接时,会发生连接错误。这通常表明存在网络或配置问题。

So,
Check : tnsping your_db_service_name
Check : telnet your_db_host 1521

Then,

Check ( listener.ora ) and lsnrctl status,
also try to restart lsnrctl .

If same issue occurs, add "SQLNET.INBOUND_CONNECT_TIMEOUT = 60" in sqlnet.ora.

finally check by connecting sqlplus or tnsping

Hope this will help you ..!!!
© www.soinside.com 2019 - 2024. All rights reserved.