SQL30081N TCP/IP-Kommunikationsfehler
In diesem Abschnitt werden die Fehler der SQL30081N TCP/IP-Kommunikationsprotokolle und empfohlene Lösungen behandelt.
Ursache
Die Ursache für Kommunikationsprotokollfehler kann je nach Plattform variieren. Jeder Protokollfehler hat eine eigene Definition und einen entsprechenden Aktionsplan.
Die Fehlernachricht SQL30081N weist das folgende Format auf:
Kommunikationsfehler. Verwendetes Kommunikationsprotokoll: protokoll. Verwendete Kommunikations-API: schnittstelle. Position, an der der Fehler erkannt wurde: position. Übertragungsfunktion, die den Fehler festgestellt hat: funktion. Protokollspezifische(r) Fehlercode(s): rc1, rc2, rc3.
Beispiel
SQL30081N A communication error has been detected. Communication protocol
being used: "TCP/IP". Communication API being used: "SOCKETS". Location
where the error was detected: "". Communication function detecting the error: "connect".
Protocol specific error code(s): "111", "*", "*".
Diese Fehlernachrichten werden zurückgegeben, wenn Db2® Socket-APIs des Betriebssystems aufruft, die eine Fehlernachricht von einer Komponente außerhalb von Db2empfangen. Diese Socketfehler werden zurück an Db2weitergegeben, das den Fehler in der Nachricht SQL30081N kapselt. Die eigentliche Ursache ist außerhalb von Db2, das sich möglicherweise im Client/Server-Netzstack oder in der Netzeinheit befindet, die sich dazwischen befindet. Bitten Sie einen Netzadministrator, Netztraces sowohl von der Client-als auch von der Serverseite zu erfassen und zu analysieren, um die Fehlerursache zu ermitteln.
Lösungen
- Für Linux und AIX, siehe TCP/IP-Fehler.
- Informationen zu Windows-Systemen finden Sie unter Systemfehlercodes .
db2cli.ini -Schlüsselwörter, die von CLI/ODBC -Anwendungen verwendet werden
db2dsdriver.cfg Schlüsselwörter, die von Windows-Anwendungen verwendet werden, die den IBM .NET Provider verwenden.
DB2 -Registrierdatenbankvariablenin der Gruppe
Communications
.Häufig gestellte Fragen JDBC ERRORCODE=-4499 Konnektivität, von Java-Anwendungen verwendet
Tabelle 1. TCP/IP-bezogene Fehler nach Plattform Fenster AIX Linux Kurzname Aktionsplan 10061 79 111 ECONNREFUSED Verbindung verweigert Der Client versucht, eine Verbindung zum Server mit einer ungültigen IP-Adresse oder einem ungültigen Port herzustellen. Überprüfen Sie auf der Serverseite, ob die folgenden Bedingungen vorliegen:Überprüfen Sie auf der Clientseite den Knotenverzeichniseintrag und stellen Sie sicher, dass die folgenden Bedingungen erfüllt sind:- Db2 Umgebungsvariable DB2COMM wird wie folgt festgelegt: DB2COMM=TCPIP
- Der SVCENAME von DBM CFG ist auf die Portnummer oder auf den Servicename der Instanz festgelegt. Der Befehl zum Aktualisieren dieses Parameters lautet
db2 update dbm cfg using svcename <port/service name>. - Wenn der Servicename festgelegt ist, überprüfen Sie die Datei 'services', um festzustellen, ob der Name einer nicht verwendeten Portnummer entspricht.
- Stellen Sie sicher, dass die Db2 -Serverinstanz ordnungsgemäß gestartet wurde.
- Servicename zeigt die richtige Portnummer oder den richtigen Servicenamen an, der dem Instanzport des Db2 -Servers entspricht (Einstellungsvcename )
- Gehen Sie wie folgt vor, um zu überprüfen, ob der Port des Servers geöffnet ist:
telnet <hostname> <port> - Wenn der Befehl fehlschlägt, wird der Port auf dem Server nicht geöffnet und das Problem liegt außerhalb des Db2 -Bereichs.
Weitere Informationen zu ECONNREFUSED finden Sie unter
http://www.ibm.com/support/docview.wss?rs=71&uid=swg2132864410053 72 103 SOCECONNABORTED Software hat die Beendigung einer Verbindung verursacht. Software hat die Verbindung geschlossen. Wenn der Fehler in einer Clientanwendung gemeldet wird, die ODBC/CLI verwendet, um eine Verbindung zu einem Db2-Server herzustellen, führen Sie die folgenden Schritte aus:- Inaktivieren Sie das Zeitlimit der Db2 -CLI, indem Sie
QUERYTIMEOUTINTERVAL=0zur Datei db2cli.ini auf der Clientseite hinzufügen. - Überprüfen Sie, ob für Anwendungen eine Zeitlimitüberschreitung aufgetreten ist, z. B. ein ADO-Zeitlimit oder ein VB-Zeitlimit.
- Wenn die Anwendung eine Verbindung zum OS390-Server herstellt, prüfen Sie den Parameter idlethreadtimeout (IDTHTOIN) auf OS390.Hinweis: Dieser Parameter legt das Zeitlimit für aktive Threads unter OS390fest.
10054 73 104 ECONNRESET-Verbindung wird von einem Partner zurückgesetzt. Ein verbundener Partner schließt die Verbindung. Überprüfen Sie das Zeitlimit auf der Partnerseite, z. B. Firewall, Anwendung, Db2 -CLI-Ebene.
Wenn der Fehler in einer Clientanwendung gemeldet wird, die ODBC/CLI verwendet, um eine Verbindung zum Db2 -Server herzustellen, führen Sie die folgenden Schritte durch:- Inaktivieren Sie das Db2 -CLI-Zeitlimit.
- Fügen Sie
QUERYTIMEOUTINTERVAL=0zur db2cli.ini-Datei auf der Clientseite hinzu. - Überprüfen Sie, ob eine Firewall zwischen dem Client und dem Server vorhanden ist.
- Wenn es ein Zeitlimit für offene Verbindungen gibt, überprüfen Sie, ob bei der Anwendung eine Zeitlimitüberschreitung aufgetreten ist, z. B. für das ADO-Zeitlimit oder das VB-Zeitlimit.
Hinweis: Fehler SQL30081 kann auftreten, wenn Sie eine Verbindung zu einer Datenbank über eine TCP/IP-Verbindung herstellen. Der Fehler kann auftreten, wenn die Datenbankverbindung lokal ist und unter Verwendung eines anderen Aliasnamens als dem Datenbanknamen katalogisiert wird. Wenn der Fehler SQL30081 angezeigt wird, stellen Sie sicher, dass die Datenbank nicht katalogisiert ist, indem Sie einen anderen Aliasnamen als den Namen der Datenbank auf dem Server verwenden.10060 78 110 ETIMEDOUT Verbindungszeitlimit Eine Verbindung erreicht das Netzzeitlimit und wird vom Netz getrennt. Das Zeitlimit wird von der TCP/IP-Schicht eingeleitet.
TCP/IP hat einen Zeitlimitwert. Wenn die Verbindung zu lange offen ist, erzwingt TCP/IP die Unterbrechung der Verbindung.
In vielen Fällen ist diese Unterbrechung ein Netzproblem.
Verwenden Sie die folgenden Problemumgehungen:1- Die Einstellung KEEPALIVE von TCPIP. Weitere Informationen finden Sie unter TCP/IP keepalive settings and related Db2 registry variables.
- Erhöhen Sie einen oder beide der Werte für DB2TCP_CLIENT_KEEPALIVE_TIMEOUT oder DB2TCP_SERVER_KEEPALIVE_TIMEOUT .
10048 67 98 EADDRINUSE Die angegebene Adresse wird bereits verwendet. Der Fehler tritt häufig in den folgenden Situationen auf: - Wenn zwei Instanzen, die auf demselben Server gestartet werden, am gleichen Port empfangsbereit sind. (Dieser Fehler tritt normalerweise bei db2start auf).
- Wenn eine Clientanwendung oder ein Agent eine Verbindung zu einer Datenbank über ein Socket herstellt, das von einer anderen Verbindung verwendet wird.
- Wenn eine Clientanwendung oder ein Agent eine Verbindung zu einer Datenbank über ein Socket herstellt, das sich im Wartestatus befindet (Status 2MSL).
Dies ist ein Microsoft-Fehler. Winsock stellt einen Port bereit, der bereits belegt (Winsock-Fehler) oder geschlossen ist, aber im Wartestatus bleibt.
Verwenden Sie die folgende Problemumgehung für Windows:- Passen Sie den Zeitraum an, während dessen sich ein Socket im Wartestatus befindet, nachdem er geschlossen wurde (die Standardeinstellung beträgt 2 Minuten).
TcpTimedWaitDelay
- Passen Sie die Anzahl der verfügbaren Ports an (Standardwert ist 5000)
MaxUserPort
- Passen Sie die Verbindungs- und Unterbrechungseinstellungen so an, dass sie das Programm nicht schnell durchlaufen (beste Lösung). 10048 wird am häufigsten durch eine schnelle Verbindungs- und Trennlogik in der Anwendung verursacht, die zu viele Ports in den Status time_wait (2MSL) versetzt. In dieser Situation verwenden Sie am besten die Verbindungskennung erneut, wenn eine Anwendung mehrere Anweisungen ausgibt (führen Sie nicht bei jedem Abschluss einer Anweisung ein Trennen und Wiederherstellen der Verbindung aus)
- Implementieren Sie das clientseitige Verbindungspooling, damit die Anwendungslogik intern nicht geändert werden muss. Stellen Sie sicher, dass der Pool groß genug ist, um 80 % der Verbindungen zu verarbeiten. Stellen Sie sicher, dass der Pool eine Form von Verbindungswiederholungslogik für eine Situation mit Unterbrechung im Leerlauf aufweist.
10055 74 105 ENOBUFS Kein Pufferspeicher verfügbar Dieser Fehler tritt auf, wenn das System über keine Ressourcen mehr verfügt, um den TCP/IP-Aufruf abzuschließen. Auf Windows-Systemen wird das Problem dadurch verursacht, dass der Desktop-Heapspeicher oder die Systemseitentabelleneinträge nicht mehr zur Verfügung stehen. Sie ist nicht Db2 zugehörig.
Um dieses Problem zu lösen, erhöhen Sie den Eintrag SystemPages der Windows-Registry.
32 32 EPIPE (Unterbrochene Pipe) Netzkonnektivitätsproblem zwischen Client und Server.
Führen Sie einen Netzsniffer-Trace auf dem Client und dem Server aus, um dieses Problem zu lösen.
10004 (WSAEINTR) Die Verbindung wird vom Client geschlossen. Für Db2 siehe Technote 10065 81 113 WSAEHOSTUNREACH Es ist keine Route zum Host vorhanden.
Für Windows-Clients, die versuchen, eine Verbindung zu einem Linux -Server herzustellen, heben Sie die Einstellung der Firewall auf dem Linux -Server auf, damit Verbindungen hergestellt werden können.
- Symptom 1
- SQL30081N Kommunikationsfehler. Verwendetes Kommunikationsprotokoll: 'TCP/IP'. Verwendete Kommunikations-API: 'SOCKETS'. Position, an der der Fehler erkannt wurde: "192.168.1.200'. Übertragungsfunktion, die den Fehler festgestellt hat: 'SelectForConnectTimeout'. Protokollspezifischer Fehlercode: '0','*','*'. SQLSTATE=08001.
- Mögliche Ursache
- 192.168.1.200 ist eine virtuelle IP, die auch anderen Einheiten zugeordnet ist. Diese Zuordnung verursacht zeitweise SQL30081N-Fehlernachrichten. Auch andere Probleme können diese Fehlernachricht generieren.
- Symptom 2
- SQL30081N Kommunikationsfehler. Verwendetes Kommunikationsprotokoll: "TCP/IP". Verwendete Kommunikations-API: "SOCKETS". Position, an der der Fehler erkannt wurde: 192.168.1.200. Kommunikationsfunktion, die den Fehler feststellt: "recv". Protokollspezifische(r) Fehlercode(s): "*", "*", "0". SQLSTATE=08001.
- Mögliche Ursache
Die Fehlercodes *,* und "0" geben an, dass die Verbindung vom Peer geschlossen wurde. Dieser Peer kann eine beliebige Netzeinheit (z. B. eine Firewall, ein Router oder eine Lastausgleichseinheit) zwischen dem Client und dem Db2 -Server oder dem Db2 -Server selbst sein.
Die Inaktivierung der Netzsicherheit und der Serversicherheitssoftware, die auf dem Db2 -Datenbankserver ausgeführt wird, kann das Problem beheben. Mehrere Sicherheitsprodukte verschiedener Anbieter interagieren möglicherweise negativ und generieren die Fehlercodes *,* und 0.
Prüfen Sie, ob Workload Manager (WLM) auf dem Db2 -Server aktiviert ist. Wenn WLM aktiviert ist, prüfen Sie, ob die Verbindung zu SQL-Abfragen getrennt wird, die länger als xx Minuten dauern. Dieses Beispiel zeigt eine Einstellung für UOWTOTALTIME von 15 Minuten.
db2 "select substr(workloadname,1,25) as workloadname,serviceclassname from syscat.workloads with UR" WORKLOADNAME SERVICECLASSNAME ---------------- ------------------ SYSDEFAULTUSERWORKLOAD SYSDEFAULTSUBCLASS SYSDEFAULTADMWORKLOAD SYSDEFAULTSUBCLASS TEST_WL MAIN_SC db2 "select workloadname,ENABLED from syscat.workloads with UR" WORKLOADNAME ENABLED -------------------- ---------- SYSDEFAULTUSERWORKLOAD Y SYSDEFAULTADMWORKLOAD Y TEST_WL Y CREATE THRESHOLD "TEST_UOW_CONC_TH" FOR WORKLOAD TEST_WL ACTIVITIES ENFORCEMENT DATABASE WHEN UOWTOTALTIME > 15 MINUTES COLLECT ACTIVITY DATA ON COORDINATOR DATABASE PARTITION WITH DETAILS FORCE APPLICATION;Überprüfen Sie außerdem den Db2 -Server, um festzustellen, ob Variablen der Kommunikationsregistry festgelegt sind. Überprüfen Sie, ob Nachrichten mit derselben Zeitmarke in der Datei db2diag.log vorhanden sind.
Nächste Schritte
Wenn weitere Maßnahmen zur Behebung von TCP/IP-Fehlern erforderlich sind, führen Sie die folgenden Tasks aus.
- Erfassen Sie Db2 -Traceergebnisse sowohl vom Db2 -Client als auch vom Db2 -Server.Hinweis: Diese Task gilt nicht für Java-Anwendung, die einen JDBC -Treiber (db2jcc.jar oder db2jcc4.jar) verwenden. Informationen zu Java-Anwendungen finden Sie unter Daten erfassen: Traceerstellung mit IBM Data Server Driver for JDBC und SQL J.Führen Sie auf der Clientseite die folgenden Tasks aus:
- Führen Sie
db2trc on -t -f ctrace.dmp -Madd SQLJC -Madd SQLJR -Madd SQLR -Madd SQLCCaus. - Warten Sie, bis der Fehler SQL30081 gemeldet wird.
- Führen Sie
db2trc offaus. - Formatieren Sie die Traces:
db2trc flw -t -wc ctrace.dmp ctrace.flwHinweis: Ältere Db2 unterstützen die Option "-wc" nicht. Entfernen Sie diesen Parameter in älteren Versionen.db2trc fmt ctrace.dmp ctrace.fmtdb2trc fmt -c ctrace.dmp ctrace_drda.fmt
Führen Sie auf der Serverseite die folgenden Tasks aus:- Führen Sie
db2trc on -t -f strace.dmp -Madd SQLJC -Madd SQLJS -Madd SQLR -Madd SQLCCaus. - Warten Sie, bis der Fehler SQL30081 gemeldet wird.
- Führen Sie
db2trc offaus. - Formatieren Sie die Traces:
db2trc flw -t -wc strace.dmp strace.flwdb2trc flw -t -wc strace.dmp strace.flwdb2trc fmt strace.dmp strace.fmtdb2trc fmt -c strace.dmp strace_drda.fmt
- Führen Sie
- Lassen Sie Ihren Netzadministrator Netz-Sniffer-Traces (Linux: tcpdump, Windows: Wireshark) sowohl von der Client-als auch von der Serverseite erfassen und analysieren. Die Ergebnisse können dabei helfen, die eigentliche Ursache des Fehlers SQL30081 zu ermitteln, wenn die Vorschläge aus den Db2 -Traces nicht helfen. Db2 -Diagnoseprogramme bieten keinen Einblick in Betriebssystem-und Netzebenen, nachdem die vom Betriebssystem bereitgestellte Socket-API aufgerufen wurde.
- Führen Sie das eigenständige pct -Tool aus, um die Netzkonnektivität im Client-und Servermodus außerhalb von Db2zu testen. Das Tool pctt befindet sich auf Linux -und AIX -Systemen im Ordner ~/sqllib/bin und auf (Windows) -Systemen im Ordner C:\Program
Files\IBM\SQLLIB\bin . Das Tool richtet separate Netzverbindungen zwischen Client und Server zum Testen ein.Hinweis: Die Angabe einer großen Puffergröße im Servermodus (z. B.
pctt s /b 32767) kann dazu führen, dass der Listener einen Kernspeicherauszug erstellt. Verwenden Sie eine kleinere Puffergröße. Dieses Programm reproduziert möglicherweise keine sporadisch auftretenden Konnektivitätsprobleme. Die Verwendung von pctt ist auf Seite 132 des Handbuchs IBM Db2 Universal Database Troubleshooting Guide dokumentiert.Führen Sie den Befehl ping aus, der in Db2 enthalten ist, um festzustellen, ob inkonsistente Latenzprobleme vorliegen.
$ db2 ping dbName request 32767 5 Elapsed time: 692983 microseconds Elapsed time: 419739 microseconds Elapsed time: 419867 microseconds Elapsed time: 210229 microseconds Elapsed time: 210103 microseconds $ db2 ping dbName response 32767 5 Elapsed time: 1241 microseconds Elapsed time: 1217 microseconds Elapsed time: 1236 microseconds Elapsed time: 2575774 microseconds <<<<< 2.5 seconds Elapsed time: 3526 microseconds
Db2 verwendet die Option KEEPALIVE der TCP/IP-Verbindung, um festzustellen, ob ein Verbindungsfehler aufgetreten ist. Diese Option überträgt in regelmäßigen Abständen eine Nachricht, um festzustellen, ob der Partner noch aktiv ist. Wenn der Partner auf diese Nachricht nicht antwortet, wird die Verbindung als defekt eingestuft und es wird ein Fehler zurückgegeben.