2009-07-03 108 views
5

我正在寻找类似蚂蚁的SQL任务的东西,但将接受格式的JDBC网址:如何使用tnsname从Ant连接到Oracle数据库?

jdbc:oracle:thin:@TNS_NAME

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

编辑: 感谢迄今为止的回应家伙。如果我详细阐述我遇到的错误,我希望这会有所帮助。

我的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 exception: Unknown host specified

与更换URL为 “jdbc:神谕:薄:@HOST:PORT:INSTANCE” 工程好的,我也可以用tnsping上面使用的tns名称,所以我知道它是有效的。

+0

这应该只适用于通常的Ant sql任务,不应该吗?以这种方式使用它有问题吗? – Stobor 2009-07-03 15:28:26

+0

这将是完美的,如果它只是工作,但我必须做错了什么。我用我的Ant脚本更新了这个问题 - 是否有错误? – zakvdm 2009-07-07 05:32:55

+0

您是否与Oracle或MySQL连接? – 2012-05-21 06:28:40

回答

6

今天正忙着工作,偶然发现了一块。 TNS的位置需要设置为系统属性,如下所示:Oracle thin JDBC to TNS name

To establish an Oracle thin JDBC connection to a TNS alias (tnsname), make sure you pass the oracle.net.tns_admin system property to the JVM. Its value should be the directory in which your tnsnames.ora file is located. After that, you can just pass the TNS alias in place of the host name in the JDBC URL.

E.g. if you simply try to connect to jdbc:oracle:thin:@MYDB, which is in your tnsnames.ora file, you’ll get an SQLException with a detail message of Io exception: Unknown host specified. If you fire up the JVM with a -Doracle.net.tns_admin=/oracle/10g/NETWORK/ADMIN, or use System.setProperty(String,String) after startup, the connection will be established successfully.

这样做我能单独使用TNS别名连接成功后。

0

如果你的意思是你想使用的tnsnames.ora而不是Thin驱动程序“厚”的连接,那么你可以换一个电话在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> 

...是基本的想法。

[其中userid,密码和tnsalias在你的属性文件中定义]

显然,这意味着你必须有至少安装了即时客户端堆栈。

0

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

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

+0

这个链接过去对我来说非常有用,但是在这种特殊情况下,我试图从Ant内部进行连接。我是否还需要指定oracle.net.tns_admin系统属性?如果是这样,我该怎么做?我用我目前使用它的方式更新了我的问题。谢谢您的帮助。 – zakvdm 2009-07-07 05:37:54

0

你确定它的网络/ ADMIN,而不是网络/管理员?

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

相关问题