我正在尝试在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
这也没有帮助。
你能帮我解决这个问题吗?
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 ..!!!