Wie behebe ich häufig auftretende Verbindungsfehler für Amazon RDS-for-Oracle-Instances?

Letzte Aktualisierung: 18.11.2021

Ich kann keine Verbindung zu meiner Amazon Relational Database Service (Amazon RDS)-for-Oracle-Instance herstellen. Ich möchte den Fehler der Meldung beheben, die ich erhalte.

Kurzbeschreibung

Bevor Sie den Verbindungsfehler beheben, gehen Sie wie folgt vor:

  • Prüfen Sie den Status Ihrer Amazon-RDS-for-Oracle-DB-Instance. Wenn sich die Instance in einem anderen Status als available (verfügbar), storage optimization (Speicheroptimierung) oder backing-up (Sicherung) befindet, können Sie keine Verbindung zur Instance herstellen.
  • Stellen Sie sicher, dass Sie über den Datenbankport eine Verbindung zur Datenbank-Instance herstellen können.
    Hinweis: Standardmäßig verwendet Oracle Port 1521.
telnet example-endpoint 1521

Wenn Sie keine Verbindung über Telnet herstellen können, beheben Sie das Problem gemäß den Anweisungen unter Wie löse ich Probleme beim Herstellen einer Verbindung zu meiner Amazon-RDS-DB-Instance?

Behebung

Stellen Sie sicher, dass Ihre Verbindungszeichenfolge korrekt ist.

Ein typischer Verbindungsdeskriptor sieht aus wie:

$ sqlplus admin/xxxx@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myexampledb.xxxx.us-east-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SID=ORCL)))

Bei Easy Connect sieht die Verbindungszeichenfolge aus wie:

$ sqlplus 'admin@myexampledb.xxxx.us-east-1.rds.amazonaws.com:1521/ORCL'

Verwenden Sie basierend auf der Fehlermeldung, die Sie erhalten, die folgenden Fehlerbehebungsoptionen:

ORA-01017: invalid username/password; logon denied

Prüfen Sie die in der Verbindungszeichenfolge angegebenen Benutzeranmeldeinformationen. Vergewissern Sie sich, dass sie korrekt sind.

ORA-12545: Connect failed because target host or object does not exist

Prüfen Sie mithilfe des NLSLOOKUP-Befehls, ob der Hostname (RDS-Endpunkt) korrekt ist:

nslookup example-database.xxxx.us-east-1.rds.amazonaws.com 
Server: xx.xx.xx.xx 
Address: xx.xx.xx.xx#53

ORA-12170: TNS:Connect timeout occurred

-oder-

ERROR: Connection reset by peer

Die häufigsten Gründe für diese Fehler sind folgende:

  • Es gibt Probleme mit dem Netzwerk, dem Verbindungsaufbau oder der Firewall.
  • Die Kommunikation mit dem Client konnte nicht innerhalb des zugewiesenen Zeitintervalls abgeschlossen werden.
  • Die Datenbank ist ausgefallen.
  • Der sqlnet.ora-Parameter ist ungültig.

Um diese Fehler zu beheben, überprüfen Sie die Syntax der Verbindungszeichenfolge, indem Sie den Befehl TNSPING auf der Client-Seite ausführen:

$ tnsping example-connection-string

Wenn die Syntax der Verbindungszeichenfolge korrekt ist, sieht die Ausgabe aus wie:

$ cat $ORACLE_HOME/network/admin/tnsnames.ora
Output :
ORCL=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST= example-database.xxxx.us-east-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)))
$ tnsping ORCL
TNS Ping Utility for Linux: Version 12.1.0.2.0 - Production on 16-NOV-2021 09:16:04
Copyright (c) 1997, 2014, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=example-database.xxxx.us-east-1.rds.amazonaws.com)(PORT=1521))
CONNECT_DATA=(SERVICE_NAME=ORCL)))
OK (20 msec)

Wenn die Syntax fehlerhaft ist, sieht die Ausgabe aus wie:

$ tnsping ORCL
TNS Ping Utility for Linux: Version 12.1.0.2.0 - Production on 16-NOV-2021 09:23:47
Copyright (c) 1997, 2014, Oracle. All rights reserved.
Used parameter files:
TNS-03505: Failed to resolve name

Sie können auch den Befehl TRCROUTE ausführen, um die Syntax der Verbindungszeichenfolge zu überprüfen:

$ trcroute example-connection-string

Wenn die Syntax der Verbindungszeichenfolge korrekt ist, sieht die Ausgabe aus wie:

Trace Route Utility for Linux: Version 12.1.0.2.0 - Production on 16-NOV-2021 09:16:25
Copyright (c) 1995, 2014, Oracle. All rights reserved.
Route of TrcRoute:
------------------
Node: Client            Time and address of entry into node:
-------------------------------------------------------------
16-NOV-2021 09:16:25 ADDRESS= PROTOCOL=TCP  HOST=example-database.xxxx.us-east-1.rds.amazonaws.com  PORT=1521
Node: Server            Time and address of entry into node:
-------------------------------------------------------------
16-NOV-2021 14:16:25 ADDRESS= PROTOCOL=TCP  HOST=example-database.xxxx.us-east-1.rds.amazonaws.com PORT=1521

Wenn die Syntax fehlerhaft ist, sieht die Ausgabe aus wie:

$ trcroute ORCL
Trace Route Utility for Linux: Version 12.1.0.2.0 - Production on 16-NOV-2021 09:25:06
Copyright (c) 1995, 2014, Oracle.  All rights reserved.
TNS-03505: Failed to resolve name

Gehen Sie wie folgt vor, um diese Fehler weiter zu beheben:

  • Achten Sie darauf, dass die Sicherheitsgruppe für Ihre RDS-DB-Instance den entsprechenden eingehenden Datenverkehr zu Ihrer Datenbank zulässt.
  • Wenn die Anwendung die Verbindung über ein On-Premises-Netzwerk herstellt, aktualisieren Sie die Firewallregeln, um Verbindungen zu und von der RDS-Instance zuzulassen.
  • Die JDBC Thin-Treiber-Verbindung kann die Oracle Net-Schicht nicht durchqueren. Wenn Sie den Oracle JDBC Thin-Treiber verwenden, führen Sie daher die Entsprechung von SQL*Net Client Tracing mit dem Oracle JDBC Thin-Treiber aus. Weitere Informationen finden Sie in der Oracle-Dokumentation zu Doc ID 793415.1.
  • Wenn Sie den JDBC Thick- oder OCI-Client verwenden, aktivieren Sie die sqlnet-Ablaufverfolgung auf der Serverseite. Um die Ablaufverfolgung auf der Serverseite zu aktivieren, ändern Sie die an die Instance angefügte benutzerdefinierte Parametergruppe. In diesem Fall ist ein Neustart nicht erforderlich. Wenn Sie die Standardparametergruppe verwenden, dann erstellen Sie eine benutzerdefinierte Parametergruppe, bearbeiten die folgenden Parameter und bearbeiten dann die Instance, damit sie die neu erstellte Parametergruppe verwendet. In diesem Fall ist ein Neustart erforderlich.
    sqlnetora.trace_level_server=16
    sqlnetora.diag_adr_enabled=OFF
    Wichtig: Das Aktivieren der Ablaufverfolgung auf Serverebene kann ein paar Auswirkungen haben. Möglicherweise wird schnell eine große Zahl von Trace-Dateien generiert. In seltenen Fällen muss der Listener oder sogar die Datenbank neu gestartet werden, um die Ablaufverfolgung nach Abschluss der Fehlerbehebung zu beenden. Der Prozess erfordert auch eine genaue Überwachung. Daher ist es eine bewährte Methode, die Ablaufverfolgung außerhalb der Hauptgeschäftszeiten oder unter isolierten Bedingungen, wenn sich kein anderer Benutzer mit der Datenbank verbindet, zu aktivieren. Stellen Sie außerdem sicher, dass der Server genügend Festplattenspeicher zur Verfügung hat. Die in diesem Artikel genannten Parameterwerte sind Beispiele. Sie können diese Werte gemäß Ihrem Anwendungsfall ändern. Weitere Informationen finden Sie unter Ändern der Verbindungseigenschaften mithilfe von sqlnet.ora-Parametern.
  • Schalten Sie die sqlnet-Ablaufverfolgung auf der Client-Seite ein. Reproduzieren Sie dann den Fehler und erfassen Sie die Details in den Trace-Dateien. Erstellen Sie ein Backup der sqlnet.ora-Datei und passen Sie dann die folgenden Parameter in der Datei an:
    TRACE_LEVEL_CLIENT = 16
    TRACE_FILE_CLIENT = client.trc
    TRACE_DIRECTORY_CLIENT = /var/log/sqlnet
    TRACE_TIMESTAMP_CLIENT = ON
    TRACE_UNIQUE_CLIENT = ON
    DIAG_ADR_ENABLED= OFF
    Um die Ablaufverfolgung zu deaktivieren, entfernen Sie die Ablaufverfolgungsparameter aus der sqlnet.ora-Datei. Auch nachdem die Ablaufverfolgungsparameter entfernt wurden, wird die Ablaufverfolgung für die bereits verbundenen Sitzungen auf der Serverseite erst gestoppt, nachdem die Client-Sitzung geschlossen wurde.
  • Wenn Sie den Fehler aufgrund eines langsamen Netzwerks erhalten, konfigurieren Sie die folgenden Parameter auf der Client- und Serverseite. Dadurch bleibt mehr Zeit für den Verbindungsaufbau:
    Client-Seite:
    SQLNET.INBOUND_CONNECT_TIMEOUT
    SQLNET.SEND_TIMEOUT
    SQLNET.RECV_TIMEOUT
    Serverseite:
    sqlnetora.sqlnet.inbound_connect_timeout
    sqlnetora.sqlnet.send_timeout
    sqlnetora.sqlnet.recv_timeout
    Wenn Sie beispielsweise den Wert 600 für alle Parameter verwenden, wird die Verbindungszeit auf 10 Minuten festgelegt.

ORA-12505: TNS:listener does not currently know of SID given in connect descriptor

Achten Sie darauf, dass die in der Verbindungszeichenfolge angegebene SID mit dem Wert von DBNAME übereinstimmt, den Sie auf der Registerkarte Configuration (Konfiguration) in der Amazon RDS-Konsole finden. Standardmäßig lauten SID und DBNAME für eine RDS-for-Oracle-Instance ORCL.

ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA

Verwenden Sie im Abschnitt CONNECT_DATA in der Verbindungszeichenfolge entweder die SID- oder die SERVICE_NAME-Klausel. Der in der Verbindungszeichenfolge angegebene Wert von SERVICE_NAME entspricht dem Wert von DBNAME, der sich auf der Registerkarte Configuration (Konfiguration) in der Amazon-RDS-Konsole findet. Standardmäßig lautet der Wert von SERVICE_NAME für eine RDS-for-Oracle-Instance ORCL.

ORA-12538: TNS:no such protocol adapter

Stellen Sie sicher, dass der PROTOCOL-Abschnitt Ihres Verbindungsdeskriptors korrekt ist. Standardmäßig lautet der Wert von PROTOCOL TCP.

ORA-12560: TNS:protocol adaptor error

Dieser Fehler weist darauf hin, dass Sie versuchen, eine Verbindung zur falschen SID oder zu einer inaktiven Datenbank herzustellen. Prüfen Sie den Status der RDS-DB-Instance. Führen Sie den Befehl tnsping aus, um die Syntax und Konnektivität der Verbindungszeichenfolge zu testen:

$ tnsping example-connection-string

ORA-00018: maximum number of sessions exceeded

Dieser Fehler weist darauf hin, dass zu viele Sitzungen mit der Datenbank verbunden sind. Gehen Sie wie folgt vor, um diesen Fehler zu beheben:

1.    Wenn Sie mit der Datenbank verbunden sind, führen Sie die folgende Abfrage aus, um die Anzahl der verbundenen Sitzungen zu ermitteln:

SELECT COUNT(*) TOTAL FROM v$session;

Führen Sie die folgende Abfrage aus, um die aktuelle Auslastung, die maximale Auslastung und die konfigurierten Grenzwerte für die sessions- und processes-Parameter in der RDS-Instance anzuzeigen:

SELECT RESOURCE_NAME, CURRENT_UTILIZATION, MAX_UTILIZATION, LIMIT_VALUE
FROM V$RESOURCE_LIMIT WHERE RESOURCE_NAME IN ( 'sessions', 'processes');

2.    Beenden Sie die unerwünschten Sitzungen, damit die anderen Sitzungen eine Verbindung zur Datenbank herstellen können.

Führen Sie die folgende Abfrage aus, um die SID und die Seriennummer einzelner zu beendender Sitzungen anzuzeigen:

col username format a15
col osuser format a15
col program format a40
col machine format a40
SELECT s.osuser,
s.sid,
s.serial#,
p.spid "RDS OS PID",
s.program,
s.machine,
s.process "CLIENT OS PID",
s.STATUS,
s.SQL_ID,
s.CURRENT_QUEUE_DURATION
FROM v$session s, v$process p
WHERE s.paddr = p.addr AND s.machine LIKE '%<client machine>%'
AND s.STATUS='ACTIVE';

Hinweis: Passen Sie die WHERE-Klausel gemäß Ihrem Anwendungsfall an.

Führen Sie den folgenden Befehl aus, um unerwünschte Sitzungen in Ihrer RDS-for-Oracle-Instance zu beenden:

begin
    rdsadmin.rdsadmin_util.disconnect(
        sid => example-sid,
        serial => example-serial_number);
end;

Weitere Informationen finden Sie unter Beenden einer Sitzung .

3.    Um den Wert der sessions- und processes-Parameter zu erhöhen, bearbeiten Sie die benutzerdefinierte Parametergruppe und ändern diese Parameter. Der sessions-Parameter ist nicht in der Parametergruppe definiert und nutzt die Standardwerte für die Engine.

Die Standardanzahl von Sitzungen in Oracle 19c wird wie folgt berechnet:

Anzahl der Sitzungen = (1,5 * die Anzahl der Prozesse) + 22.

Der Standardwert für den processes-Parameter ist als LEAST({DBInstanceClassMemory/9868951}, 20000) definiert. Die Anzahl der Prozesse wird als Gesamtarbeitsspeicher (MB) in Host / 10 oder 20 000 berechnet, je nachdem, welcher Wert niedriger ist.

Weitere Informationen zum Ändern einer Parametergruppe finden Sie unter Ändern von Parametern in einer DB-Parametergruppe.

Da diese Parameter statisch sind, müssen Sie Ihre Instance neu starten, nachdem Sie diese Parameter aktualisiert haben.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?