2009-07-03 28 views
5

Ich suche etwas ähnliches auf die Ant Task SQL, aber das wird eine JDBC-URL des Format annehmen:Wie kann ich eine Verbindung zu einer Oracle-Datenbank von Ant mit dem tnsname herstellen?

jdbc:oracle:thin:@TNS_NAME

Ein möglicher Ansatz meiner eigenen Ant Aufgabe zu sein scheint zu schreiben, die eine OracleDataSource verwendet das schaffen Verbindung, aber gibt es eine Möglichkeit, dies direkt in Ant zu tun?

EDIT: Danke für die Antworten bisher Jungs. Ich hoffe es hilft, wenn ich ein wenig mehr auf den Fehler eingehen werde, den ich bekomme.

Meine Ant-Task sieht wie folgt aus:

<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> 

Dies mit dem Fehler fehlschlägt:

java.sql.SQLException: Io exception: Unknown host specified

die URL Ersetzen mit "jdbc: oracle: thin: @HOST: PORT: INSTANZ" Werke Gut, und ich kann auch den oben verwendeten DNS-Namen verwenden, damit ich weiß, dass er gültig ist.

+0

Das sollte nur mit der üblichen Ant SQL Aufgabe funktionieren, oder? Gibt es ein Problem damit? – Stobor

+0

Es wäre perfekt, wenn es nur funktioniert hätte, aber ich muss etwas falsch machen. Ich habe die Frage mit meinem Ant-Skript aktualisiert - gibt es einen Fehler? – zakvdm

+0

Sind Sie mit Oracle oder MySQL verbunden? –

Antwort

6

Arbeitet gerade heute damit und stolperte über das fehlende Stück. Der TNS-Standort muss als Systemeigenschaft festgelegt werden, wie hier angegeben: 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.

Nachdem Sie das getan ich in der Lage war erfolgreich zu verbinden allein das TNS-Alias.

+0

Danke für Ihre Antwort! Es ist so lange her, dass ich dieses Problem hatte, dass ich mich kaum an die Details erinnern kann, aber Ihre Antwort scheint sehr vielversprechend, :) – zakvdm

0

Wenn Sie meinen, dass Sie eine „dicke“ Verbindung möchten, die tnsnames.ora und nicht die Thin-Treiber verwendet, dann können Sie einen Anruf wickeln in der XML-Datei 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> 

... ist die Grundidee.

[userid, ein Passwort und tnsalias in Ihren Eigenschaften definiert Datei]

Das ist offensichtlich bedeutet, dass Sie müssen werden zumindest der Instant Client-Stack installiert.

0

Da wir jetzt noch nicht, was genau das Problem ist, ich kann nur davon ausgehen, dass dies helfen kann:

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

+0

Dieser Link war in der Vergangenheit sehr nützlich für mich, aber in diesem speziellen Fall versuche ich mich von Ant aus zu verbinden. Muss ich noch die Systemeigenschaft oracle.net.tns_admin angeben? Wenn ja, wie würde ich das tun? Ich habe meine Frage so aktualisiert, wie ich sie gerade nutze. Danke für die Hilfe. – zakvdm

+0

würde ich mir denken. Sie tun es wie folgt: was ich von hier kopiert habe: http: // ideoplex.com/id/372/setting-java-system-Eigenschaften-mit-ant –

0

Sind Sie sicher, dass es NETWORK/ADMIN und nicht network/admin?

Unix-Dateisysteme sind in der Regel Groß-und Kleinschreibung - (unter der Annahme, dass es unter Unix ist).

+0

Sie haben recht, es ist eigentlich "Netzwerk/admin". Allerdings habe ich beides ausprobiert und es machte keinen Unterschied. Ich frage mich, ob es keine bessere Möglichkeit gibt, die Eigenschaft an die SQL-Aufgabe zu übergeben (wenn ich das Java-Ziel anrufe, verwende ich eine 'sysproperty', aber die SQL-Aufgabe scheint das nicht zu unterstützen ...) . – zakvdm

Verwandte Themen