web-dev-qa-db-fra.com

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

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 tnsnames pour se connecter à cette base de données

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

puis l'utiliser dans sqlplus

sqlplus user/pass@local_SID

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

sqlplus user/pass@[email protected] ;( I know, this one is not valid)
83
Louis Rhys
 sqlplus user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))

Peut-être, et cela peut dépendre 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)))'
88
René Nyffenegger

Vous pouvez utiliser connexion facile pour cela:

sqlplus usr/[email protected]/remote_service_name

Pour activer la connexion facile sur votre machine, vous devez l'ajouter au NAMES.DIRECTORY_PATH dans sqlnet.ora, par exemple:

NAMES.DIRECTORY_PATH=(EZCONNECT)

Si votre écouteur se trouve sur un port autre que celui par défaut, utilisez [email protected]:port/....

En fait, il semble que vous devez fournir un nom de service, pas un SID; ils peuvent être identiques, mais sinon, vous devrez l'obtenir auprès du serveur.

37
Alex Poole

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 à 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
18
Philᵀᴹ

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

 Niveau système Niveau utilisateur 
 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_ADMIN n'est pas défini alors ils sont recherchés dans le répertoire $Oracle_HOME/network/admin.

Les fichiers de configuration au niveau utilisateur ne remplacent pas les fichiers de configuration au niveau système dans leur ensemble (comme le TNS_ADMIN répertoire remplacer l'ensemble $Oracle_HOME/network/admin) mais ils ajoutent ou modifient les entrées des fichiers de configuration au niveau du système. Si une entrée existe dans un fichier de configuration au niveau utilisateur, alors celle-ci est utilisée, si elle n'existe pas dans le fichier de configuration au niveau utilisateur, alors l'entrée du fichier de configuration au niveau système est utilisée.

3
miracle173