2009-07-03 9 views
5

Sto cercando qualcosa di simile al compito di sql Ant ma che accetterà un URL JDBC del formato:Come posso connettermi ad un database Oracle da Ant usando il nome tns?

jdbc:oracle:thin:@TNS_NAME

Un possibile approccio sembra essere quello di scrivere il mio compito Ant che utilizza un OracleDataSource per creare il Connessione, ma c'è un modo per farlo direttamente in Ant?

MODIFICA: Grazie per le risposte finora ragazzi. Spero che mi aiuti se approfondisco un po 'di più sull'errore che sto ottenendo.

mio compito Ant appare come segue:

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

questo viene a mancare con l'errore:

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

Sostituzione del URL con "jdbc: oracle: thin: @HOST: Porta: istanza" opere bene, e posso anche tnsping il nome tns usato sopra, quindi so che è valido.

+0

Che dovrebbe funzionare solo con il solito compito di Ant sql, non dovrebbe? C'è un problema con l'utilizzo in questo modo? – Stobor

+0

Sarebbe perfetto se funzionasse, ma dovrei fare qualcosa di sbagliato. Ho aggiornato la domanda con il mio script Ant - c'è un errore? – zakvdm

+0

Sei collegato con Oracle o MySQL? –

risposta

6

Stavo solo lavorando con questo oggi e sono incappato nel pezzo mancante. La posizione TNS deve essere impostata come una proprietà di sistema come indicato qui: 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.

Dopo aver fatto questo sono stato in grado di connettersi utilizzando l'alias TNS solo.

+0

Grazie per la tua risposta! È passato tanto tempo da quando ho avuto questo problema che riesco a malapena a ricordare i dettagli, ma la tua risposta sembra molto promettente, :) – zakvdm

0

Se vuoi dire che si desidera un collegamento "di spessore" che utilizza tnsnames.ora e non il conducente sottile, allora si può avvolgere una chiamata al sqlplus nel file XML:

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

... è l'idea di base.

[dove userid, password e tnsalias sono definiti nelle proprietà file]

Questo significa, ovviamente, dovrete avere almeno lo stack di Instant Client installato.

0

Dal momento che non ora ancora, che cosa l'esatto problema è, posso solo supporre che questo potrebbe aiutare:

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

+0

Questo collegamento mi è stato molto utile in passato, ma in questo caso specifico sto provando a connettermi da Ant. Devo ancora specificare la proprietà di sistema oracle.net.tns_admin? Se sì, come lo farei? Ho aggiornato la mia domanda con il modo in cui attualmente la sto usando. Grazie per l'aiuto. – zakvdm

+0

Lo penserei. Lo fai in questo modo: che ho copiato da qui: http: // ideoplex.com/id/372/impostazione-java-system-proprietà-con-formica –

0

Sei sicuro che sia network/admin e non network/admin?

I file system Unix sono generalmente sensibili al maiuscolo/minuscolo (assumendo che sia su Unix).

+0

Hai ragione, in realtà è "network/admin". Tuttavia, ho provato entrambi e non ha fatto alcuna differenza. Mi chiedo se non c'è un modo migliore per passare la proprietà al compito di sql (quando chiamo il bersaglio Java, io uso un 'sysproperty', ma il compito di sql non sembra supportare questa ...) . – zakvdm

Problemi correlati