Mac系统下Python连接Oracle数据库遭遇ORA-12537: TNS:connection closed错误的求助
Mac系统下Python连接Oracle数据库遭遇ORA-12537: TNS:connection closed错误的求助
我现在在Mac系统上尝试连接Oracle数据库,我们团队平时用Java开发,连接方式是通过SSH隧道连到远程主机,同时使用Oracle数据库钱包,这些配置在Java的属性文件里都能正常工作。
现在我想在Python里用同样的SSH隧道和钱包来连接数据库,查了不少资料后写了下面的代码:
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:connection closed错误。我在网上查了这个错误,大部分解决方案都说和连接字符串或者钱包文件不正确有关,但同一个钱包文件在SQL Developer和Java应用里都能正常使用。
其中一个解决方案建议我用终端的sqlplus命令测试Oracle客户端连接:
sqlplus 127.0.0.1:1522/mydb_high
执行这个命令后,我又遇到了ORA-12162: TNS:net service name is incorrectly specified错误。
我的钱包目录下的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
但修改后问题还是没有解决,有没有人能帮我看看这是怎么回事?
备注:内容来源于stack exchange,提问作者Bhavin
相关产品推荐
相关产品推荐

