所以我可以这样连接到Oracle数据库:
import cx_Oracle as ora
dsnStr = ora.makedsn(host="ABC.COM", port="ABC_PORT", sid="ABC")
con = ora.connect(user="ABC_USER", password="ABC_PASSWORD", dsn=dsnStr)
print(con.version)
con.close()
,并且效果很好,但是我想使用Oracle wallet
/ tnsnames
/ database.properties
进行连接(我来自Java世界)。到目前为止,找不到有关如何实现这一目标的任何信息。另外,如何根据这些cx_Oracle
/ Oracle wallet
/ tnsnames
相应文件的路径来“配置” database.properties
。
答案 0 :(得分:1)
我无法帮助将cx_Oracle所需的Java端转换为C端,但是下面的内容将有助于显示cx_Oracle的需求。我将使用一个基于Oracle Exadata Express的示例,该示例使用钱包进行连接,请参见有关将脚本语言连接到Exadata Express here的通用说明。
您的确切配置和文件可能有所不同。正如Anthony指出的那样,安全设置并非特定于cx_Oracle。经验丰富且乐于助人的安全专家可能会在其他论坛上潜伏。
对于Exadata Express,将下载预先提供的钱包zip文件。对于像cx_Oracle这样的Oracle Call Interface应用程序,我们只需要zip中的以下文件:sqlnet.ora,tnsnames.ora和cwallet.sso。您将需要创建/查找这些(或所需的)文件。
我的文件是:
sqlnet.ora :
WALLET_LOCATION = (SOURCE = (METHOD = file)
(METHOD_DATA = (DIRECTORY="$TNS_ADMIN")))
SSL_SERVER_DN_MATCH=yes
tnsnames.ora :
dbaccess = (description=
(address=(protocol=tcps)(port=1522)(host=whereever.com))
(connect_data=(service_name=whereever2.com))
(security=(ssl_server_cert_dn="CN=wherever2.com,O=Oracle Corporation,L=Redwood Shores,ST=California,C=US"))
)
cwallet.sso : 我会让你想像中...
我将这三个文件放在/Users/cjones/Cloud
中,并设置环境以查找它们:
$ export TNS_ADMIN=/Users/cjones/Cloud
现在,我可以使用tnsnames.ora
文件中的连接名称进行连接:
$ sqlplus -l cj/mypassword@dbaccess
SQL*Plus: Release 12.2.0.1.0 Production on Fri Jul 6 10:20:21 2018
Copyright (c) 1982, 2017, Oracle. All rights reserved.
Last Successful login time: Tue Jul 03 2018 13:00:06 +10:00
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL>
在cx_Oracle中,您的dsn
也将是dbaccess
。
答案 1 :(得分:0)
cx_Oracle使用与SQL Plus相同的技术来连接数据库。因此,如果您发现这样做更容易,则可以先使用SQL Plus进行测试。
为此,您将需要创建一个sqlnet.ora配置文件。这使您可以将wallet file的位置等参数设置为。如果在默认位置找不到环境变量TNS_ADMIN,则可以使用它指定此配置文件和其他配置文件的位置(如tnsnames.ora)。有关更多信息,请参见documentation。