Quelques antécédents: J'essaie de me connecter à une base de données Oracle. J'ai un nom d'utilisateur, un mot de passe, une adresse IP, un port et un nom de service. Je n'ai accès à cette base de données qu'à partir d'une instance Ubuntu EC2 sur AWS car la base de données Oracle est située dans une autre organisation. Pour cette raison, je n'ai pas accès à un nom d'hôte DNS pour cette machine.
J'ai téléchargé le package client "Oracle Instant Client with SQL Plus" à partir du site Web d'Oracle et l'ai extrait dans un dossier. Lorsque j'essaye de l'exécuter, je reçois ce message:
ORA-24454: le nom d'hôte du client n'est pas défini
Après deux heures, je l'ai compris.
la documentation d'Oracle pour l'erreur ne semblait pas terriblement descriptif au début:
ORA-24454: le nom d'hôte du client n'est pas défini
Cause : Le nom d'hôte réseau dans des fichiers comme/etc/hosts n'a pas été défini.
Action : définissez le nom d'hôte et réessayez.
Maintenant, la commande fonctionnait sur ma machine (ordinateur portable Ubuntu), mais elle ne fonctionnait pas sur EC2. J'ai fouillé un peu avec la variable HOSTNAME
et j'ai essayé de trouver s'il y avait un moyen de remplacer le "nom d'hôte client" dans les paramètres de sqlplus
- pas de dés. J'ai finalement comparé les/etc/hosts de ma machine à celui d'EC2, et j'ai remarqué cette ligne qui n'était pas dans EC2:
127.0.1.1 my-laptop-hostname
Je ne le savais pas auparavant, mais apparemment, il est normal sur les machines basées sur Debian de mapper le nom d'hôte du système à cette adresse IP . Je ne savais même pas que 127.0.1.1 était une IP de bouclage; Je connaissais juste 127.0.0.1.
De plus, il semble que sqlplus
repose sur la présence de cette ligne. Je ne sais toujours pas pourquoi.
Quoi qu'il en soit, la solution est simple:
$ Sudo /bin/bash -c "echo '127.0.1.1 ${HOSTNAME}' >> /etc/hosts"
Cela était dû à un paramètre VPC sous lequel l'EC2 a été créé, était défini sur non:
Sous Vos VPC -> Résumé onglet,
Noms d'hôte DNS : non
Afin d'éviter la résolution manuelle comme répondu par d'autres, définissez la valeur de DNS hostnames sur yes
Il a été mentionné dans un commentaire ci-dessus, mais cette ligne a résolu ce problème pour moi sur mon MacBook Pro, en exécutant le docker wnameless/Oracle-xe-11g sur le port 1521.
Sudo /bin/bash -c "echo '127.0.0.1 ${HOSTNAME}' >> /etc/hosts"
Les commandes suivantes ont alors toutes très bien fonctionné:
sqlplus system/Oracle@localhost:1521/xe
sqlplus system/[email protected]:1521/xe
sqlplus system/Oracle@my-personal-hostname:1521/xe
Très étrange, mais c'est la solution.
J'ai eu ce problème dans mon macOS
Veuillez vous assurer d'avoir correctement saisi votre nom d'hôte sur votre /etc/Host
s fichier
pour faire ça> hostname
la commande affiche le "vrai nom d'hôte de votre mac" et la ligne ci-dessous vers/etc/hosts
127.0.0.1 your_Host_name.local
Ce problème m'est arrivé, mais n'a pas été résolu uniquement par la solution ci-dessus. Si vous utilisez le client 11g/12g, vous obtiendrez une erreur différente.
Afin de résoudre l'erreur, procédez comme suit:
hostname -A
renvoie le même nom d'hôte qui apparaît dans /etc/sysconfig/network
/etc/hosts
comme indiqué ci-dessus (127.0.0.1 hostname)