Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
Wie behebe ich häufig auftretende Verbindungsfehler für meine Amazon RDS for Oracle-Instance?
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:
-
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');
-
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;
-
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?

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 3 Monaten
- AWS OFFICIALAktualisiert vor einem Jahr