【发布时间】:2013-01-09 05:30:46
【问题描述】:
我正在尝试使用 Oracle JDBC 瘦驱动程序(11.2.0.2.0 的 ojdbc6.jar)和以下 JDBC URL 语法连接到 Oracle (11.2.0.2.0) 数据库:
jdbc:oracle:thin:@abcd
在我的 tnsnames.ora 文件中定义了“abcd”,如下所示:
abcd, abcd.world, abcd.dk.xyz.com =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = abcd.dk.xyz.com)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = abcd)
)
)
我已经按照Oracle® Database JDBC Developer's Guide and Reference 提供了VM 选项-Doracle.net.tns_admin=/etc/tnsnames.ora。
运行应用程序时出现以下错误:
Listener refused the connection with the following error:
ORA-12504, TNS:listener was not given the SID in CONNECT_DATA
但是当我从 tnsnames.ora 中删除别名 abcd.world 和 abcd.dk.xyz.com 时,我的应用程序能够连接到数据库。
当 tnsnames.ora 文件中有多个别名时,ojdbc 驱动程序是否存在问题?
我的 JDK 版本是 1.6.0_31。
谢谢, 主播
【问题讨论】:
-
oracle.net.tns_admin 应该指向一个目录而不是一个文件。所以应该是
-Doracle.net.tns_admin=/etc。另请注意,数据库集群可能有多个主机名,外加许多 DBA 可能想要设置的连接参数。 tnsnames.ora 确实应该是首选方式。 JDBC url 太“愚蠢”了。