如果使用 Oracle 钱包,正确的 JDBC URL 语法是啥?
Posted
技术标签:
【中文标题】如果使用 Oracle 钱包,正确的 JDBC URL 语法是啥?【英文标题】:What is correct JDBC URL syntax if Oracle wallets are used?如果使用 Oracle 钱包,正确的 JDBC URL 语法是什么? 【发布时间】:2011-10-03 11:08:51 【问题描述】:有 2 种 URL 语法,旧语法仅适用于 SID,新语法适用于 Oracle 服务名称。 旧语法
jdbc:oracle:thin:@[HOST][:PORT]:SID
新语法
jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE
什么是正确的 JDBC URL 语法如果使用 Oracle 钱包? 根据this article,应使用以下 URL 语法:
jdbc:oracle:thin:/@db_alias
但我可以看到以下 URL 也可以:
jdbc:oracle:thin:@db_alias
哪些语法是正确的?
【问题讨论】:
【参考方案1】:当您使用带有 JDBC 字符串的 Oracle Wallet 时,两种语法都允许,只要您的“db_alias”显然已在您的 Wallet 存储中设置。
现在,就在 Oracle Wallet 中使用 SQL*Plus 而言,Oracle Wallet 允许的唯一格式是:
/@db_alias
顺便说一句,您引用的那篇文章(和others)指出,如果您使用 OCI 驱动程序而不是瘦客户端,则只能使用 JDBC 进行连接。这通常是因为 Java 不了解 Oracle TNS 和 SQLNET 文件。这实际上是不正确的;您可以使用 JDBC 瘦驱动程序与最新的 Oracle 客户端和 JDBC 驱动程序进行连接,但它只需要一些设置。有关这方面的信息,请参阅 http://tech.shopzilla.com/2011/09/oracle-wallet-with-thin-driver-with-connection-pool-with-database-timeouts/,并在下方查看简短摘要。
将 Oracle Wallet 与 JDBC 瘦驱动程序结合使用
-
配置 Oracle Wallet as usual(Oracle 数据库客户端附带),在您的 tnsnames.ora 和 sqlnet.ora 文件中创建适当的条目,并在您的钱包中创建凭证条目
将以下 JAR 添加到您的 Java 类路径中。您应该从 Oracle 11g 客户端获得这些,它们可以在客户端安装所在的“jdbc”和/或“jlib”目录中找到
Oracle JDBC 驱动程序 -
ojdbc6.jar
Oracle 钱包 - oraclepki.jar
Oracle 安全证书 - osdt_cert.jar
Oracle 安全核心 - osdt_core.jar
使用以下系统属性启动您的 Java 应用程序,指向您各自的 TNS 和钱包目录:
-Doracle.net.tns_admin=C:\myTNSdir
-Doracle.net.wallet_location=C:\mywalletdir
然后您可以在您的应用程序中使用瘦 JDBC 连接字符串,如下所示:jdbc:oracle:thin:/@MY_WALLET_DB_ENTRY
【讨论】:
我正在尝试从休眠应用程序中实现相同的效果,这应该可以工作。但我得到 oracle.net.ns.NetException: SO Exception was generated at oracle.net.resolver.AddrResolution.resolveAddrTree(AddrResolution.java:629)以上是关于如果使用 Oracle 钱包,正确的 JDBC URL 语法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 SSO 钱包将 Oracle 与 Apache Spark 连接
逃脱的正确方法是啥?使用 Oracle 12c MATCH_RECOGNIZE 时 JDBC PreparedStatement 中的字符?