Quiero conectarme a una base de datos oracle ubicada en otro host usando sqlplus. Esta página me sugirió añadir un elemento en mi tnsnames para conectarme 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 modificar los tnsnames locales no es posible. ¿Es posible conectarse a una base de datos remota sólo con el argumento de sqlplus sin tener que cambiar los tnsnames? Algo así como
sqlplus user/pass@[email protected] ;( I know, this one is not valid)
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 la línea de comandos que esté utilizando, necesita 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)))'
Para ello puede utilizar easy connect:
sqlplus usr/[email protected]/remote_service_name
Para habilitar easy connect en tu máquina, tienes que añadirlo al NAMES.DIRECTORY_PATH
en sqlnet.ora, por ejemplo
NAMES.DIRECTORY_PATH=(EZCONNECT)
Si su receptor está en un puerto no predeterminado, utilice [email protected]:port/...
.
En realidad, parece que tiene que proporcionar un nombre de servicio, no un SID; pueden ser los mismos, pero si no, tendrá que obtenerlo del servidor.
Cree una copia del archivo tnsnames.ora en un directorio en el que pueda escribir, modifique el archivo como corresponda y luego establezca la variable de entorno TNS_ADMIN en la ubicación de ese directorio.
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