Cómo usar sqlplus para conectarse a una base de datos Oracle ubicada en otro host sin modificar mis propios tnsnames.ora


80

Quiero conectarme a una base de datos Oracle ubicada en otro host usando sqlplus. Esta página sugirió agregar un elemento en mis tnsnames para conectarse a esa base de datos

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

y luego usar eso en sqlplus

sqlplus user/pass@local_SID

Sin embargo, en mis circunstancias no es posible modificar los tnsnames locales. ¿Es posible conectarse a una base de datos remota simplemente usando el argumento sqlplus sin tener que cambiar tnsnames? Algo como

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

1
aún más corto - sqlplus userid / password @ database

@GlennLong, pero en su versión, ¿ databasesigue siendo un alias de TNS, que tiene que existir en el tnsnames.ora, por lo que es lo mismo que Louis estaba tratando de evitar?
Alex Poole

Respuestas:


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

Tal vez, y esto podría depender del entorno de línea de comandos que esté utilizando, debe citar la cadena, algo así como

 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

Puede usar easy connect para esto:

sqlplus usr/pass@hostname.network/remote_service_name

Para habilitar la conexión fácil en su máquina, debe agregarla a NAMES.DIRECTORY_PATH sqlnet.ora, por ejemplo:

NAMES.DIRECTORY_PATH=(EZCONNECT)

Si su escucha está en un puerto no predeterminado, use ...@hostname.network:port/....

En realidad, parece que debe proporcionar un nombre de servicio, no un SID; pueden ser los mismos, pero si no, deberá obtenerlos del servidor.


1
Si el nombre del servicio es el mismo que el nombre de host, ni siquiera necesita especificar el nombre del servicio al conectarse. (Prácticamente nadie hace esto, pero es bueno saberlo.)
durette

Enlace muerto .......
Harvey

1
@ Harvey: actualizado, gracias.
Alex Poole

17

Cree una copia del archivo tnsnames.ora en un directorio en el que pueda escribir, modifique el archivo en consecuencia y luego configure la variable de entorno TNS_ADMIN en la ubicación de ese directorio.

p.ej:

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
Esta es una respuesta mucho, mucho mejor
Andrew Sledge

Este enfoque funciona con un sistema que no tiene una infraestructura Oracle instalada que no sea un cliente sqlplus. Simplemente copie sobre tnsnames.ora desde el servidor de db y siga el proceso de Phil.
theRiley

3

En el sistema Unix / Linux, puede usar los archivos de configuración de nivel de usuario para anular las entradas de nivel de sistema.

Nivel de sistema Nivel de usuario 
Archivo de configuración Archivo de configuración
------------------ -------------------
sqlnet.ora $ HOME / .sqlnet.ora
tnsnames.ora $ HOME / .tnsnames.ora

Los archivos de configuración a nivel del sistema se pueden encontrar en el directorio $TNS_ADMIN. Si la variable TNS_ADMINno está configurada, se busca en el directorio $ORACLE_HOME/network/admin.

Los archivos de configuración de nivel de usuario no sustituyen a los archivos de configuración de nivel de sistema como un todo (como el TNS_ADMINdirectorio sustituye a todo el $ORACLE_HOME/network/admindirectorio) pero agregan o cambian las entradas de los archivos de configuración de nivel de sistema. Si existe una entrada en un archivo de configuración de nivel de usuario, se utiliza esta, si no existe en el archivo de configuración de nivel de usuario, se utiliza la entrada del archivo de configuración de nivel de sistema.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.