Java 如何使用带有TNSNames别名语法的JDBC精简驱动程序连接到Oracle数据库
我正在尝试使用Oracle JDBC精简驱动程序(11.2.0.2.0的ojdbc6.jar)和以下JDBC URL语法连接到Oracle(11.2.0.2.0)数据库:Java 如何使用带有TNSNames别名语法的JDBC精简驱动程序连接到Oracle数据库,java,jdbc,Java,Jdbc,我正在尝试使用Oracle JDBC精简驱动程序(11.2.0.2.0的ojdbc6.jar)和以下JDBC URL语法连接到Oracle(11.2.0.2.0)数据库: jdbc:oracle:thin:@abcd 其中“abcd”在我的tnsnames.ora文件中定义,如下所示: abcd, abcd.world, abcd.dk.xyz.com = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = abcd.dk.
jdbc:oracle:thin:@abcd
其中“abcd”在我的tnsnames.ora文件中定义,如下所示:
abcd, abcd.world, abcd.dk.xyz.com =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = abcd.dk.xyz.com)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = abcd)
)
)
我已经按照提供了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.031
谢谢,
VJ理想情况下,您不应该通过TNS进行连接,因为您需要在计算机上安装oracle客户端 如果使用如下所示的连接url,则不需要oracle客户端:
jdbc:oracle:thin:@//host:port/service_name
看起来,Oracle JDBC驱动程序无法与多个服务名称一起工作。 使用这些条目
abcd =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = abcd.dk.xyz.com)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = abcd)
)
)
abcd.world, abcd.dk.xyz.com =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = abcd.dk.xyz.com)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = abcd)
)
)
我可以通过以下方式通过tnsnames.ora成功连接到oracle
你说得对。我也希望如此。oracle客户端安装在每个环境中。我们被要求不要依赖主机名和端口号,因为它们可以随时更改,也可以在不同的环境中更改。此外,还要尽量减少必须更改设置的位置。应用程序使用其他语言编写此设置似乎没有问题。如果您仍要使用TNS,我建议使用以下链接:。但主机和端口不应随时间随机更改。它们应该是每个环境的稳定设置。您必须做的一件事是从应用程序外部化url,以便可以为每个环境设置。此链接实际上更好:Thanks用于链接Tom。url已经外部化了,我们现在使用的是
jdbc:oracle:thin:@//host:port/service\u name
格式。我猜当存在多个别名时,我们无法使用oracle jdbc驱动程序从tnsnames.ora使用TNS name。oracle.net.TNS\u admin应该指向一个目录,而不是一个文件。因此它应该是-Doracle.net.tns_admin=/etc
。还要注意,数据库集群可能有多个主机名,而且DBA可能需要设置几十个连接参数。确实应该优先选择tnsnames.ora。JDBC URL太“愚蠢”。