如何使用tnsname从Ant连接到Oracle数据库?

时间:2009-07-03 15:22:20

标签: oracle ant jdbc

我正在寻找类似于Ant sql任务的东西,但是它会接受格式为的JDBC网址:

  

JDBC:预言:瘦:@TNS_NAME

一种可能的方法似乎是编写我自己的Ant任务,该任务使用OracleDataSource来创建Connection,但有没有办法直接在Ant中执行此操作?

修改 感谢你们到目前为止的回复。我希望如果我详细说明我得到的错误会有所帮助。

My Ant任务如下所示:

<target name="MyTarget" >
    <property name="oracle.net.tns_admin" value="/opt/oracle/product/10.2.0.1/NETWORK/ADMIN" />
    <property name="jdbc.driver" value="ojdbc5.jar" />
    <property name="jdbc.i18n.support" value="orai18n.jar" />
    <property name="jdbc.driver.class" value="oracle.jdbc.OracleDriver" />
    <path id="sql.class.path">
        <pathelement location="${jdbc.driver}" />
        <pathelement location="${jdbc.i18n.support}" />
    </path>

    <sql driver="${jdbc.driver.class}" url="jdbc:oracle:thin:@THE_TNS_NAME" userid="USER" password="PASSWORD" classpathref="sql.class.path" >
        <![CDATA[
        #SOME ARBITRARY SQL HERE
        ]]>
    </sql>
</target>

失败并显示错误:

  

java.sql.SQLException:Io异常:指定了未知主机

用“jdbc:oracle:thin:@HOST:PORT:INSTANCE”替换url工作正常,我也可以调整上面使用的tns名称,所以我知道它是有效的。

4 个答案:

答案 0 :(得分:6)

今天刚刚和这个人一起工作,偶然发现了失踪的一块。需要将TNS位置设置为系统属性,如下所示:Oracle thin JDBC to TNS name

  

建立与TNS别名(tnsname)的Oracle瘦JDBC连接,   确保将oracle.net.tns_admin系统属性传递给JVM。   它的值应该是tnsnames.ora文件所在的目录   位于。之后,您可以通过TNS别名代替   JDBC URL中的主机名。

     

E.g。如果您只是尝试连接到jdbc:oracle:thin:@MYDB,其中   在你的tnsnames.ora文件中,你会得到一个带有细节的SQLException   Io异常消息:指定了未知主机。如果你启动JVM   使用-Doracle.net.tns_admin = / oracle / 10g / NETWORK / ADMIN,或使用   System.setProperty(String,String)启动后,连接   将成功建立。

执行此操作后,我能够仅使用TNS别名成功连接。

答案 1 :(得分:0)

如果你想要一个使用tnsnames.ora而不是瘦驱动程序的“密集”连接,那么你可以在xml文件中包含对sqlplus的调用:

<target name="myTarget">
  <!-- login.sql should have sqlcode exit so failonerror will fail build -->
  <exec executable="sqlplus" failonerror="true">
        <arg value="${userid}/${password}@${tnsalias}"/>
        <arg value="@myScript"/>
  </exec>
</target>

...是基本想法。

[在您的属性文件中定义了用户ID,密码和tnsalias]

这显然意味着您必须至少安装Instant Client堆栈。

答案 2 :(得分:0)

由于我们现在还没有,确切的问题是什么,我只能假设这可能会有所帮助:

http://theblasfrompas.blogspot.com/2008/04/jdbc-thin-connection-using-tnsnamesora.html

答案 3 :(得分:0)

您确定它是NETWORK / ADMIN而不是网络/管理员吗?

Unix文件系统通常区分大小写 - (假设它在Unix上)。