web-dev-qa-db-fra.com

"ORA-24454: le nom d'hôte du client n'est pas défini" lors de la connexion à partir d'une instance Ubuntu sur AWS EC2

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

10
Karl Johnson

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"
13
Karl Johnson

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

3
Arif Basri

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.

2
turiyag

J'ai eu ce problème dans mon macOS

Veuillez vous assurer d'avoir correctement saisi votre nom d'hôte sur votre /etc/Hosts 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
1
Melih

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:

  1. hostname -A renvoie le même nom d'hôte qui apparaît dans /etc/sysconfig/network
  2. Vérifiez que le nom d'hôte se trouve dans votre /etc/hosts comme indiqué ci-dessus (127.0.0.1 hostname)
1
Bren1818