Come utilizzare sqlplus per connettersi a un database Oracle situato su un altro host senza modificare il mio tnsnames.ora


80

Voglio collegarmi a un database Oracle situato su un altro host usando sqlplus. Questa pagina mi ha suggerito di aggiungere un elemento sui miei nomi tns per collegarlo a quel database

local_SID =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL= TCP)(Host= hostname.network)(Port= 1521))
    (CONNECT_DATA = (SID = remote_SID))
  )

e poi usalo in sqlplus

sqlplus user/pass@local_SID

Tuttavia, nelle mie circostanze non è possibile modificare i nomi tnn locali. È possibile connettersi a un database remoto semplicemente usando l'argomento sqlplus senza cambiare tnsnames? Qualcosa di simile a

sqlplus user/pass@remote_SID@hostname.network ;( I know, this one is not valid)

1
ancora più breve - sqlplus userid / password @ database

@GlennLong - ma nella tua versione, databasec'è ancora un alias TNS, che deve esistere nel tnsnames.ora, quindi è lo stesso che Louis stava cercando di evitare?
Alex Poole,

Risposte:


85
 sqlplus user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))

Forse, e questo potrebbe dipendere dall'ambiente della riga di comando che stai usando, devi citare la stringa, qualcosa del genere

 sqlplus "user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))"

o

 sqlplus 'user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))'

35

Puoi usare easy connect per questo:

sqlplus usr/pass@hostname.network/remote_service_name

Per abilitare la connessione facile sul tuo computer, devi aggiungerlo a NAMES.DIRECTORY_PATH in sqlnet.ora, ad esempio:

NAMES.DIRECTORY_PATH=(EZCONNECT)

Se il listener è su una porta non predefinita, utilizzare ...@hostname.network:port/....

In realtà sembra che devi fornire un nome di servizio, non un SID; potrebbero essere uguali, ma in caso contrario dovrai ottenerlo dal server.


1
Se il nome del servizio è uguale al nome host, non è nemmeno necessario specificare il nome del servizio durante la connessione. (Praticamente nessuno lo fa, ma è bello saperlo.)
Durette,

Dead link .......
Harvey,

1
@Harvey: aggiornato, grazie.
Alex Poole,

17

Creare una copia del file tnsnames.ora in una directory in cui è possibile scrivere, modificare il file di conseguenza, quindi impostare la variabile di ambiente TNS_ADMIN nella posizione di quella directory.

per esempio:

cp $ORACLE_HOME/network/admin/tnsnames.ora /tmp/tnsnames.ora
# edit the /tmp/tnsnames.ora file to add your entries

# Set the $TNS_ADMIN environment variable so that sqlplus knows where to look 
export TNS_ADMIN=/tmp

2
Questa è una risposta molto, molto migliore
Andrew Sledge,

Questo approccio funziona con un sistema in cui non è installata alcuna infrastruttura Oracle diversa da un client sqlplus. Basta copiare su tnsnames.ora dal server db e seguire il processo di Phil.
theRiley

3

Sul sistema Unix / Linux è possibile utilizzare i file di configurazione a livello utente per sovrascrivere le voci a livello di sistema.

Livello utente Livello utente 
File di configurazione File di configurazione
------------------ -------------------
sqlnet.ora $ HOME / .sqlnet.ora
tnsnames.ora $ HOME / .tnsnames.ora

I file di configurazione a livello di sistema sono disponibili nella directory $TNS_ADMIN. Se la variabile TNS_ADMINnon è impostata, vengono cercati nella directory $ORACLE_HOME/network/admin.

I file di configurazione a livello di utente non sostituiscono i file di configurazione a livello di sistema nel loro insieme (poiché la TNS_ADMINdirectory sostituisce l'intera $ORACLE_HOME/network/admindirectory) ma aggiungono o modificano le voci dei file di configurazione a livello di sistema. Se esiste una voce in un file di configurazione a livello di utente, viene utilizzata questa, se non esiste nel file di configurazione a livello di utente, viene utilizzata la voce del file di configurazione a livello di sistema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.