Heute, da die ETL-Knotenmaschine auf einen neuen Datenbankserver zugreifen möchte, muss sie tnsnames.ora konfigurieren, und nachdem das Ergebnis konfiguriert ist, wird beim Verbinden mit der Datenbank ein Fehler gemeldet:
ORA-12547: TNS:lost contact
Zuerst dachte ich, es sei tnsnames.ora falsch konfiguriert, aber nach Vergleich und Überprüfung wurde diese Möglichkeit ausgeschlossen. Weil dieselbe Konfiguration auf anderen Hosts verifiziert wurde, um sich mit diesem Datenbankserver zu verbinden.
Als Nächstes suchte ich viele Informationen im Internet anhand dieser Fehlermeldung "ORA-12547: TNS: Verlorener Kontakt", einige sagten, es gebe einen Mangel an Softwarepaketen, andere meinten, es gebe ein Problem mit den Dateiberechtigungseinstellungen des Datenbankhosts, aber diese entsprachen nicht der aktuellen Situation.
Später beschloss ich, die Protokolle anzusehen, überprüfte das Überwachungsprotokoll listener.log der Datenbank und stellte fest, dass sich darin folgende Fehlermeldungen befanden: 20. MAI 2016 15:46:03 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=db01)(USER=grid))(COMMAND=status)(ARGUMENTS=64)(SERVICE=LISTENER)(VERSION=186647552)) * Status * 0 Eingehende Verbindung von 192.168.24.1 abgelehnt 20. MAI 2016 15:46:06 * 12546
TNS-12546: TNS:permission denied
TNS-12560: TNS:protocol adapter error TNS-00516: Genehmigung abgelehnt
und überprüfte die sqlnet.ora-Konfiguration des Datenbankservers und stellte fest, dass dies daran lag, dass die Datenbankzugriffs-IP-Einschränkung gesetzt war, also nur die angegebene IP auf die Datenbank zugreifen konnte.
Da es sich um eine RAC-Datenbank mit zwei Knoten handelt, bedeutet das Ändern von sqlnet.ora unter dem Grid-Benutzer das Hinzufügen der IP-Adresse des ETL-Knotens zur IP-Whitelist, um auf die Datenbank zuzugreifen. Nach der Modifikation wird das Hören neu gestartet (lsnrctl reload), sonst wird weiterhin ein Fehler gemeldet. |