Wie behebe ich häufig auftretende Verbindungsfehler für meine Instance von Amazon RDS für Oracle?
Ich kann keine Verbindung zu meiner Instance von Amazon Relational Database Service (Amazon RDS) für Oracle herstellen.
Kurzbeschreibung
Gehe wie folgt vor, bevor du den Verbindungsfehler behebst:
- Überprüfe den Status deiner DB-Instance von Amazon RDS für Oracle. Wenn sich die Instance in einem anderen Status als Verfügbar, Speicheroptimierung oder Wird gesichert befindet, kannst du keine Verbindung mit der Instance herstellen.
- Stelle sicher, dass du über den Datenbankport 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
Deine Verbindung überprüfen
Stelle sicher, dass die Verbindungszeichenfolge korrekt ist. Ein typischer Connect Descriptor 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: invalid username/password; logon denied
Überprüfe die Benutzeranmeldeinformationen, die in der Verbindungszeichenfolge angegeben sind. Vergewissere dich, dass diese Anmeldeinformationen korrekt sind.
ORA-12545: Connect failed because target host or object does not exist
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 Client-Seite 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 TRCROUTE-Befehl 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 die RDS-DB-Instance den entsprechenden eingehenden Datenverkehr zur Datenbank zulässt.
-
Wenn die Anwendung eine Verbindung über ein On-Premises-Netzwerk herstellt, stelle sicher, dass die Firewall-Regeln Verbindungen zu und von der Instance zulassen.
-
Die JDBC Thin-Treiberverbindung durchläuft nicht die Oracle-Net-Schicht. Wenn du also den JDBC-Thin-Treiber von Oracle verwendest, führe das Äquivalent von SQL*Net Client Tracing mit dem JDBC-Thin-Treiber von Oracle durch. Weitere Informationen findest du auf der Oracle-Website unter How to perform the equivalent of SQL*Net client tracing with Oracle JDBC thin driver releases prior to 11.2 (Doc ID 793415.1) (So führst du das Äquivalent zum SQL*Net-Client-Tracing mit JDBC-Thin-Treiberversionen von Oracle vor 11.2 durch (Dokument-ID 793415.1) auf der Oracle-Website.
-
Wenn du den JDBC-Thick- bzw. OCI-Client verwendest, aktiviere das SQLnet-Tracing auf der Serverseite. Um das Tracing auf der Serverseite zu aktivieren, ändere die benutzerdefinierte Parametergruppe, die an die Instance angefügt 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 das Tracing auf Server-Ebene 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 das Tracing nach Abschluss der Problembehandlung zu stoppen. Der Prozess erfordert auch eine genaue Überwachung. Es hat sich bewährt, das Tracing außerhalb der Hauptbetriebszeiten oder unter isolierten Bedingungen zu aktivieren, wenn keine anderen Benutzer eine Verbindung zur Datenbank herstellen. 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 Instance von RDS für Oracle DB-herstellen.
-
Aktiviere das SQLNET-Tracing auf der Client-Seite. 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 das Tracing zu deaktivieren, entferne die Tracing-Parameter aus der Datei sqlnet.ora. Das Tracing für die bereits verbundenen Sitzungen auf der Serverseite wird erst gestoppt, nachdem die Client-Sitzung 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:
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 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 Aurora- und RDS-Konsole befindet. Standardmäßig lauten SID und DBNAME für eine Instance von RDS für Oracle 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 Aurora- und RDS-Konsole befindet. Standardmäßig ist der SERVICE_NAME-Wert für eine Instance von RDS für Oracle ORCL.
ORA-12538: TNS:no such protocol adapter
Vergewissere dich, dass der Abschnitt PROTOCOL deines Connect Descriptors 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 gestoppt 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 der Instance von RDS für Oracle-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 Sitzungsparameter 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) definiert. 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 Datenbank-Instance von Amazon RDS für Oracle herstellen?
- Themen
- Database
- Sprache
- Deutsch
Ähnliche Videos


Relevanter Inhalt
AWS OFFICIALAktualisiert vor einem Jahr