"ORA-24454: Client-Hostname ist nicht festgelegt", wenn eine Verbindung von einer Ubuntu-Instanz auf AWS EC2 hergestellt wird

10

Einige Hintergrundinformationen: Ich versuche, eine Verbindung zu einer Oracle-Datenbank herzustellen. Ich habe einen Benutzernamen, ein Passwort, eine IP-Adresse, einen Port und einen Dienstnamen. Ich habe nur von einer Ubuntu EC2-Instanz unter AWS Zugriff auf diese Datenbank, da sich die Oracle-Datenbank in einer anderen Organisation befindet. Aus diesem Grund habe ich keinen Zugriff auf einen DNS-Hostnamen für diesen Computer.

Ich habe das Clientpaket "Oracle Instant Client mit SQL Plus" von der Oracle-Website heruntergeladen und in einen Ordner extrahiert. Wenn ich versuche, es auszuführen, erhalte ich folgende Meldung:

ORA-24454: Der Client-Hostname ist nicht festgelegt

Karl Johnson
quelle

Antworten:

15

Nach zwei Stunden habe ich es herausgefunden.

Die Dokumentation von Oracle für den Fehler schien zunächst nicht besonders aussagekräftig zu sein:

ORA-24454: Der Client-Hostname ist nicht festgelegt

Ursache : Der Netzwerkhostname in Dateien wie / etc / hosts wurde nicht festgelegt.

Aktion : Legen Sie den Hostnamen fest und versuchen Sie es erneut.

Jetzt funktionierte der Befehl auf meinem Computer (Ubuntu-Laptop), aber auf EC2 nicht. Ich habe HOSTNAMEein bisschen mit der Variablen rumgespielt und versucht herauszufinden, ob es eine Möglichkeit gibt, den "Client-Hostnamen" in sqlplusden Einstellungen zu überschreiben - keine Würfel. Schließlich habe ich die / etc / hosts meines Computers mit denen in EC2 verglichen und festgestellt, dass diese Zeile nicht in EC2 enthalten ist:

127.0.1.1 my-laptop-hostname

Ich wusste das vorher nicht, aber anscheinend ist es auf Debian-basierten Computern normal , den Hostnamen des Systems dieser IP-Adresse zuzuordnen . Ich wusste nicht einmal, dass 127.0.1.1 eine Loopback-IP ist. Ich wusste gerade über 127.0.0.1.

Darüber hinaus scheint es darauf sqlplusangewiesen zu sein, dass diese Linie vorhanden ist. Immer noch keine Ahnung warum.

Wie auch immer, die Lösung ist einfach:

$ sudo /bin/bash -c "echo '127.0.1.1 ${HOSTNAME}' >> /etc/hosts"
Karl Johnson
quelle
1
Diese Lösung funktionierte für mich auf einem Mac Book Pro.
Axiopistie
1
Vielen Dank! Ich hatte Probleme, mit Python und pyodbc eine Verbindung zu einer Oracle-Datenbank herzustellen. Das fehlende Stück, das ich brauchte, war folgendes : echo "127.0.0.1 `hostname`" >> /etc/hosts.
L42
Sehr seltsamerweise stellte ich fest, dass dies auch für mich auf einem MacBook Pro funktionierte, während ich Docker wnameless / oracle-xe-11g ausführte, unabhängig davon, ob eine direkte Verbindung über IP, über "localhost" oder über "my-host-name" I hergestellt wurde Diese Zeile in / etc / hosts muss die Loopback 127.0.0.1 IP auf meinen Hostnamen verweisen. Beim Hinzufügen haben alle gearbeitet, beim Entfernen ist alles kaputt gegangen, wieder hinzugefügt, alles ist wieder in Ordnung. Sehr komisch.
Turiyag
3

Dies lag an einer VPC-Einstellung, unter der der EC2 erstellt wurde, und wurde auf no gesetzt :

Unter Ihrem VPC -> Zusammenfassung Registerkarte

DNS-Hostnamen : Nein

Setzen Sie den Wert der DNS-Hostnamen auf yes , um eine manuelle Auflösung durch andere zu vermeiden

Arif Basri
quelle
3

Es wurde oben in einem Kommentar erwähnt, aber diese Zeile hat dieses Problem für mich auf meinem MacBook Pro behoben, auf dem Docker wnameless / oracle-xe-11g auf Port 1521 ausgeführt wird.

sudo /bin/bash -c "echo '127.0.0.1 ${HOSTNAME}' >> /etc/hosts"

Die folgenden Befehle funktionierten dann alle einwandfrei:

sqlplus system/oracle@localhost:1521/xe
sqlplus system/oracle@127.0.0.1:1521/xe
sqlplus system/oracle@my-personal-hostname:1521/xe

Sehr seltsam, aber das ist die Lösung.

turiyag
quelle
1

Ich hatte dieses Problem in meinem MacOS

Bitte stellen Sie sicher, dass Sie Ihren Hostnamen korrekt in Ihre /etc/hostDatei eingegeben haben

das tun > hostnameBefehl zeigt die „echte Hostnamen Ihres mac“ und die folgende Zeile in / etc / hosts

127.0.0.1 your_host_name.local
Melih
quelle
1

Dieses Problem ist mir passiert, wurde aber nicht allein durch die obige Lösung behoben. Wenn Sie den 11g / 12g-Client verwenden, wird ein anderer Fehler angezeigt.

Gehen Sie wie folgt vor, um den Fehler zu beheben:

  1. hostname -A Gibt den gleichen Hostnamen zurück, der in angezeigt wird /etc/sysconfig/network
  2. Stellen Sie sicher, dass sich der Hostname /etc/hostswie oben angegeben in Ihrem befindet (127.0.0.1 Hostname).
Bren1818
quelle
0

Für Benutzer einer der virtuellen Maschinen, die Oracle bereitstellt, kann VPN ein Faktor sein.

Wenn eine Verbindung besteht, wird das Problem durch Trennen der Verbindung zum VPN behoben.

Aus irgendeinem Grund mag es der Oracle-Client nicht, mit einem VPN verbunden zu sein, obwohl der Netzwerkverkehr für die Oracle-Datenbank den lokalen Computer nicht verlässt

Cristik
quelle