在Oracle JDeveloper中使用纯TNSNAMES而不是基于主机的数据库连接

时间:2011-04-12 10:12:24

标签: oracle jdeveloper tnsnames

我正在使用Oracle JDeveloper 11.1.1.4.0,只要我指定,我就可以使用Oracle (JDBC)驱动程序创建数据库连接(类型为thin)而没有任何问题主持人。

例如,我可以通过指定:

连接到本地运行的Oracle XE数据库
Driver: thin
Host Name: localhost
JDBC Port: 1521
Service Name: XE

为了连接到远程数据库,我使用TNS,我的tnsnames.ora文件设置如下,其中MYDATABASE.EXAMPLE.COM是我想要使用的Oracle服务标识符。

MYDATABASE.EXAMPLE.COM=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST=testdb.example.com)
      (PORT=1234)
    )
    (CONNECT_DATA=
      (SERVICE_NAME=MYDATABASE.example.com)
    )
  )

MYDATABASE.EXAMPLE.COM服务的连接使用SQL Developer,SQL Plus,TNSPING等从这台机器上运行,但我找不到在JDeveloper数据库连接中指定它的方法,而不必强制指定主机。

我不想指定主机的原因与我们首先使用TNS的原因相同 - testdb.example.com主机将随时间变化,但MYDATABASE.EXAMPLE.COM TNS服务标识符不会。

如果我指定主机testdb.example.com以及正确的TNS别名,则连接有效。如果我指定了错误的标识符,它就会失败 - 它肯定知道我的tnsnames.ora文件的内容。

this one这样的帖子似乎暗示如果JDeveloper知道TNS_ADMIN,它将使用tnsnames.ora,但即使使用“输入自定义JDBC URL”也不起作用,使用如下字符串:

jdbc:oracle:thin:MYDATABASE.EXAMPLE.COM

它仍然提供“请输入主机名的有效值”错误。

有人知道如何在JDeveloper中创建数据库连接而不指定主机吗?

1 个答案:

答案 0 :(得分:2)

根据Oracle JDBC开发人员指南,您需要通过(JVM)系统属性指定tnsnames.ora文件的位置,以便能够使用带有瘦驱动程序的tnsnames:

http://download.oracle.com/docs/cd/B28359_01/java.111/b31224/urls.htm#BEIDIJCE

您需要以定义系统属性oracle.net.tns_admin的方式启动SQL Developer。

添加

AddVMOption -Doracle.net.tns_admin=/path/to/tnsnames.ora

到ide.conf应该做的伎俩(虽然我还没试过)。