Comment utiliser sqlplus pour se connecter à une base de données Oracle située sur un autre hôte sans modifier mon propre tnsnames.ora

80

Je souhaite me connecter à une base de données Oracle située sur un autre hôte à l'aide de sqlplus. Cette page a suggéré d'ajouter un élément sur mes noms de domaine pour se connecter à cette base de données.

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

et ensuite l'utiliser dans sqlplus

sqlplus user/pass@local_SID

Cependant, dans mes circonstances, la modification des noms locaux n'est pas possible. Est-il possible de se connecter à une base de données distante en utilisant simplement l'argument sqlplus sans avoir à changer de nom? Quelque chose comme

sqlplus user/pass@remote_SID@hostname.network ;( I know, this one is not valid)
Louis Rhys
la source
1
encore plus court - sqlplus userid / password @ database
@GlennLong - mais dans votre version, databasec'est toujours un alias de TNS, qui doit exister dans le tnsnames.ora, alors c'est le même que celui que Louis essayait d'éviter?
Alex Poole

Réponses:

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

Peut-être, et cela dépend-il de l'environnement de ligne de commande que vous utilisez, vous devez citer la chaîne, quelque chose comme:

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

ou

 sqlplus 'user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))'
René Nyffenegger
la source
35

Vous pouvez utiliser easy connect pour cela:

sqlplus usr/pass@hostname.network/remote_service_name

Pour permettre une connexion facile sur votre NAMES.DIRECTORY_PATH ordinateur, vous devez l'ajouter à dans sqlnet.ora, par exemple:

NAMES.DIRECTORY_PATH=(EZCONNECT)

Si votre auditeur utilise un port autre que celui par défaut [email protected]:port/....

En fait, il semble que vous deviez fournir un nom de service, pas un SID; ils peuvent être les mêmes mais sinon, vous devrez vous en procurer au serveur.

Alex Poole
la source
1
Si le nom du service est identique au nom d'hôte, vous n'avez même pas besoin de spécifier le nom du service lors de la connexion. (Pratiquement personne ne le fait, mais c'est bon à savoir.)
durette
Lien mort .......
Harvey
1
@Harvey - mis à jour, merci.
Alex Poole
17

Créez une copie du fichier tnsnames.ora dans un répertoire dans lequel vous pouvez écrire, modifiez le fichier en conséquence, puis définissez la variable d'environnement TNS_ADMIN sur l'emplacement de ce répertoire.

par exemple:

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
Philᵀᴹ
la source
2
C'est une réponse bien meilleure
Andrew Sledge
Cette approche fonctionne avec un système sur lequel aucune infrastructure Oracle n'est installée, à l'exception d'un client sqlplus. Copiez simplement le fichier tnsnames.ora à partir du serveur de base de données et suivez le processus de Phil.
theRiley
3

Sur les systèmes Unix / Linux, vous pouvez utiliser les fichiers de configuration de niveau utilisateur pour remplacer les entrées de niveau système.

Niveau utilisateur Niveau système 
Fichier de configuration Fichier de configuration
------------------ -------------------
sqlnet.ora $ HOME / .sqlnet.ora
tnsnames.ora $ HOME / .tnsnames.ora

Les fichiers de configuration au niveau du système se trouvent dans le répertoire $TNS_ADMIN. Si la variable TNS_ADMINn'est pas définie, la recherche est effectuée dans le répertoire $ORACLE_HOME/network/admin.

Les fichiers de configuration de niveau utilisateur ne remplacent pas les fichiers de configuration de niveau système dans leur ensemble (car le TNS_ADMINrépertoire remplace le $ORACLE_HOME/network/adminrépertoire entier ), mais ils ajoutent ou modifient des entrées des fichiers de configuration de niveau système. Si une entrée existe dans un fichier de configuration au niveau de l'utilisateur, celui-ci est utilisé. S'il n'existe pas dans le fichier de configuration au niveau de l'utilisateur, l'entrée du fichier de configuration au niveau du système est utilisée.

miracle173
la source