如何使用带有TNSNames别名语法的JDBC瘦驱动程序连接到Oracle数据库

时间:2013-01-25 09:12:59

标签: java jdbc

我正在尝试使用Oracle JDBC瘦驱动程序(ojdbc6.jar for 11.2.0.2.0)和以下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.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。

谢谢, VJ

3 个答案:

答案 0 :(得分:3)

看起来,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)
    )
  )

答案 1 :(得分:0)

我可以通过以下方式通过tnsnames.ora成功连接到oracle

  1. 下载并解压飞路
  2. 从oracle网站
  3. 下载ostdbcX.jar
  4. 将驱动程序目录中的文件放入flyway文件夹
  5. 在路径中放置flyway文件夹(在那里找到flyway cli脚本)(es:在linux export PATH = / home / matteo / opt / flyway
  6. 编辑flyway binary / home / matteo / opt / flyway / flyway放入JAVA_ARGS =“ - Doracle.net.tns_admin =指向包含tnsnames.ora的文件夹
  7. 注意:linux的flyway脚本在以下行中有一个错误:JAVA_ARGS =“ - Djava.security.egd = file:/ dev /../ dev / urandom $ JAVA_ARGS”你需要附加$ JAVA_ARGS不被覆盖
  8. 编辑项目文件夹中名称为flyway.conf
  9. 的文件
  10. 使用此命令测试飞路

    flyway -configFile = flyway.conf info

  11. 我收到此输出

      

    Boxfuse的Flyway 4.0.3

         

    数据库:jdbc:oracle:thin:@ PSR.LAB_CERT(Oracle 11.2)

         

    + --------- + ------------- + --------------------- + --------- +

         

    |版本|说明|安装在|州|

         

    + --------- + ------------- + --------------------- + --------- +

         

    |没有发现迁移|

         

    + --------- + ------------- + --------------------- + --------- +

答案 2 :(得分:-1)

理想情况下,您不应通过TNS连接,因为您需要在计算机上安装oracle客户端。

如果您使用如下连接URL,则不需要oracle客户端:

jdbc:oracle:thin:@//host:port/service_name