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

Lesedauer: 8 Minute
0

Ich kann keine Verbindung zu meiner Amazon Relational Database Service (Amazon RDS) for Oracle-Instance herstellen.

Kurzbeschreibung

Gehe wie folgt vor, bevor du den Verbindungsfehler behebst:

  • Überprüfe den Status deiner Amazon RDS für Oracle-DB-Instance. Wenn sich die Instance in einem anderen Status als Verfügbar, Speicheroptimierung oder Backup befindet, kannst du keine Verbindung mit der Instance herstellen.
  • Stelle sicher, dass du über den Datenbankanschluss eine Verbindung zur Datenbank-Instance herstellen kannst. Standardmäßig verwendet Oracle Port 1521.
telnet example-endpoint 1521

Wenn du über telnet keine Verbindung herstellen kannst, behebe das Problem anhand der Anweisungen unter Wie löse ich Probleme bei der Herstellung einer Verbindung zu meiner Amazon RDS-DB-Instance?

Lösung

Überprüfe deine Verbindung

Stelle sicher, dass deine Verbindungszeichenfolge korrekt ist. Ein typischer Connect-Deskriptor sieht etwa wie folgt aus:

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 etwa wie folgt aus:

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

Verwende die folgenden Optionen zur Problembehandlung auf der Grundlage der Fehlermeldung, die du erhältst:

ORA-01017: Ungültiger Benutzername/Passwort; Anmeldung verweigert

Überprüfe die Benutzeranmeldeinformationen, die in der Verbindungszeichenfolge angegeben sind. Vergewissere dich, dass diese Anmeldeinformationen korrekt sind.

ORA-12545: Die Verbindung ist fehlgeschlagen, weil der Zielhost oder das Zielobjekt nicht existiert

Verwende den folgenden NLSLOOKUP-Befehl, um zu überprüfen, 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

Zu den häufigsten Gründen für diese Fehler gehören die folgenden:

  • 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 Parameter sqlnet.ora ist ungültig.

Führe den TNSPING-Befehl auf der Clientseite aus, um die Syntax der Verbindungszeichenfolge zu überprüfen:

tnsping example-connection-string

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

$ 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 bei der Syntax ein Fehler auftritt, sieht die Ausgabe etwa wie folgt aus:

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

Du kannst 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 etwa wie folgt aus:

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 bei der Syntax ein Fehler auftritt, sieht die Ausgabe etwa wie folgt aus:

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

Gehe wie folgt vor, um diese Fehler weiter zu beheben:

  • Stelle sicher, dass die Sicherheitsgruppe für deine RDS-DB-Instance den entsprechenden eingehenden Datenverkehr zu deiner Datenbank zulässt.

  • Wenn die Anwendung eine Verbindung über ein lokales Netzwerk herstellt, stelle sicher, dass die Firewallregeln Verbindungen zu und von der Instanz zulassen.

  • Die JDBC Thin-Treiberverbindung durchläuft nicht die Oracle Net-Schicht. Wenn du also den Oracle JDBC Thin-Treiber verwendest, führe das Äquivalent von SQL*Net Client Tracing mit Oracle JDBC Thin Driver durch. Weitere Informationen findest du auf der Oracle-Website unter So führst du das Äquivalent zum SQL*Net-Client-Tracing mit Oracle JDBC-Thin-Treiberversionen vor 11.2 durch (Dokument-ID 793415.1).

  • Wenn du den JDBC Thick- oder OCI-Client verwendest, aktiviere das SQLnet-Tracing auf der Serverseite. Um das Tracing auf der Serverseite zu aktivieren, ändere die benutzerdefinierte Parametergruppe, die der Instance zugeordnet ist. In diesem Fall ist kein Neustart erforderlich. Wenn du die Standardparametergruppe verwendest, erstelle eine benutzerdefinierte Parametergruppe und ändere die folgenden Parameter. Ändere dann die Instance so, dass sie die neu erstellte Parametergruppe verwendet. In diesem Fall ist ein Neustart erforderlich.

    sqlnetora.trace_level_server=16

    sqlnetora.diag_adr_enabled=ON

    Wichtig: Wenn du die Protokollierung auf Serverebene aktivierst, kann schnell eine große Anzahl von Trace-Dateien generiert werden. In seltenen Fällen muss der Listener oder sogar die Datenbank möglicherweise neu gestartet werden, um die Ablaufverfolgung nach Abschluss der Problembehandlung zu beenden. Der Prozess erfordert auch eine genaue Überwachung. Es hat sich bewährt, die Ablaufverfolgung außerhalb der Hauptgeschäftszeiten oder unter isolierten Bedingungen zu aktivieren, wenn kein anderer Benutzer eine Verbindung zur Datenbank herstellt. Stelle außerdem sicher, dass auf dem Server ausreichend Speicherplatz verfügbar ist. Die in diesem Artikel genannten Parameterwerte sind Beispiele. Du kannst diese Werte entsprechend deinem Anwendungsfall ändern. Weitere Informationen findest du unter Verbindung zu deiner RDS for Oracle DB-Instance herstellen.

  • Schalte die SQLNET-Ablaufverfolgung auf der Clientseite ein. Reproduziere dann den Fehler und erfasse die Details in den Trace-Dateien. Erstelle eine Sicherungskopie der Datei sqlnet.ora, und ändere dann die folgenden Parameter in der Datei:

    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 Protokollierung zu deaktivieren, entferne die Protokollierungsparameter aus der Datei sqlnet.ora. Das Tracing für die bereits verbundenen Sitzungen auf der Serverseite wird erst gestoppt, nachdem die Clientsitzung geschlossen wurde.

  • Wenn du den Fehler aufgrund eines langsamen Netzwerks erhältst, konfiguriere die folgenden Parameter auf der Client- und Serverseite. Dadurch bleibt mehr Zeit, um die Verbindung herzustellen:

    Clientseite:

    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 du beispielsweise den Wert 600 für alle Parameter verwendest, wird die Verbindungszeit auf 10 Minuten festgelegt.

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

Vergewissere dich, dass die in der Verbindungszeichenfolge angegebene SID mit dem Wert von DBNAME übereinstimmt, der sich auf der Registerkarte Konfiguration der Amazon RDS-Konsole befindet. Standardmäßig sind SID und DBNAME für eine RDS for Oracle-Instance ORCL.

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

Stelle sicher, dass du entweder die SID- oder die SERVICE_NAME-Klausel im Abschnitt CONNECT_DATA in der Verbindungszeichenfolge verwendest. Der in der Verbindungszeichenfolge angegebene Wert von SERVICE_NAME entspricht dem Wert von DBNAME, der sich auf der Registerkarte Konfiguration der Amazon RDS-Konsole befindet. Standardmäßig ist der SERVICE_NAME-Wert für eine RDS für Oracle-Instance ORCL.

ORA-12538: TNS:no such protocol adapter

Vergewissere dich, dass der Abschnitt PROTOCOL deines Connect-Deskriptors korrekt ist. Standardmäßig ist der Wert von PROTOCOL TCP.

ORA-12560: TNS:protocol adaptor error

Dieser Fehler weist auf eine Verbindung mit der falschen SID oder auf eine Datenbank hin, die nicht aktiv ist. Überprüfe den Status der RDS-DB-Instance. Führe 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. Gehe wie folgt vor, um diesen Fehler zu beheben:

  1. Wenn du mit der Datenbank verbunden bist, führe die folgende Abfrage aus, um die Anzahl der verbundenen Sitzungen zu ermitteln:

    SELECT COUNT(*) TOTAL FROM v$session;

    Führe die folgende Abfrage aus, um die aktuelle Auslastung, die maximale Auslastung und die konfigurierten Grenzwerte für die Sitzungs- und Prozessparameter 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. Beende die unerwünschten Sitzungen, damit die anderen Sitzungen eine Verbindung zur Datenbank herstellen können.

    Führe die folgende Abfrage aus, um die SID und die Seriennummer einzelner Sitzungen anzuzeigen, die beendet werden sollen:

    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: Ändere die WHERE-Klausel entsprechend deinem Anwendungsfall.

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

    begin
        rdsadmin.rdsadmin_util.disconnect(
            sid => example-sid,
            serial => example-serial_number);
    end;
  3. Um den Wert der Sitzungs- und Prozessparameter zu erhöhen, bearbeite die benutzerdefinierte Parametergruppe und ändere die Parameter. Der Sessions-Parameter ist nicht in der Parametergruppe definiert und verwendet die Standardwerte für die Engine.

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

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

    Der Standardwert für den Prozessparameter ist als LEAST({DBInstanceClassMemory/9868951}, 20000). Die Anzahl der Prozesse wird als Gesamtspeicher (MB) auf dem Host /10 oder 20 000 berechnet, je nachdem welcher Wert kleiner ist.

    Weitere Informationen zum Ändern einer Parametergruppe findest du unter Parametergruppen für Amazon RDS.

    Da diese Parameter statisch sind, musst du die Instance neu starten, nachdem du diese Parameter aktualisiert hast.

Ähnliche Informationen

Warum kann ich keine Verbindung zu meiner Amazon RDS for Oracle-Datenbank-Instance herstellen?