Ich habe ein Szenario, in dem lange Leerlaufsitzungen vonTOADSoftDie Client-Kommunikation mit dem Oracle-Server scheint unterbrochen zu werden, da es bei einer Firewall mit zwischenzeitlichem State-Full zu einer Zeitüberschreitung kommt.
Diese Sitzungen könnten mehrere Stunden lang inaktiv sein!
Es ist nicht akzeptabel, das Timeout der Firewall global zu erhöhen, und
natürlich werden längere Timeouts für bestimmte Flows nicht unterstützt.
Ich habe dieses Problem für PuTTY-Leerlaufverbindungen behoben;
es ermöglicht einekonfigurierbares Keep-Alive.
Ich habe in der TOAD-Software jedoch bisher keine derartige Unterstützung gefunden.
Als ich mich ein wenig mit systemweiten Konfigurationen befasste, stieß ich auf dieses Microsoft TechNet-Detail unterSystemweite Keep-Alives konfigurierendas beinhaltet die Zusammenarbeit mit derKeepAliveTimeund zugehörige Registrierungsvariablen.
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveTime
Das scheint dieSystemweite Linux-Konfiguration zur Verwendung von systemweitem Keep-Alive.
Dafür müssen die Programme jedoch Keep-Alive verwenden setsockopt()
und anfordern (richtig?).
Denken Sie daran, dass Keepalive-Unterstützung, selbst wenn sie im Kernel konfiguriert ist, nicht das Standardverhalten in Linux ist. Programme müssen Keepalive-Steuerung für ihre Sockets über die Schnittstelle setsockopt anfordern. Es gibt relativ wenige Programme, die Keepalive implementieren...
Fragen
- Kann ich das benutzenKeepAliveTime-Technik auf den Windows-Client-Rechnern oder möglicherweise dem Server?
(hat es jemand probiert?)- Gibt es eine andere Möglichkeit, diese TOAD-Verbindungen aktiv zu halten (von beiden Enden der Kommunikation aus)?
Antwort1
Legen Sie den Wert vonSQLNET.EXPIRE_TIMEin sqlnet.ora.
Hier ist wasdas Oracle-Handbuchsagt zu diesem Thema:
Zweck
Verwenden Sie den Parameter SQLNET.EXPIRE_TIME
, um das Zeitintervall in Minuten anzugeben, in dem eine Überprüfung gesendet wird, ob Client-/Serververbindungen aktiv sind. Wenn Sie einen Wert größer als 0 festlegen, stellen Sie sicher, dass Verbindungen aufgrund einer abnormalen Clientbeendigung nicht auf unbestimmte Zeit offen bleiben. Wenn die Überprüfung eine beendete Verbindung oder eine Verbindung feststellt, die nicht mehr verwendet wird, gibt sie einen Fehler zurück, der dazu führt, dass der Serverprozess beendet wird. Dieser Parameter ist in erster Linie für den Datenbankserver vorgesehen, der normalerweise mehrere Verbindungen gleichzeitig verarbeitet.
Es gelten die folgenden Einschränkungen bei der Verwendung dieser Funktion zur Erkennung beendeter Verbindungen:
- Bei vererbten Anschlüssen ist dies nicht zulässig.
- Obwohl ein Testpaket sehr klein ist, erzeugt es zusätzlichen Datenverkehr, der die Netzwerkleistung beeinträchtigen kann.
- Je nachdem, welches Betriebssystem verwendet wird, muss der Server möglicherweise zusätzliche Verarbeitungsvorgänge ausführen, um das Verbindungsprüfungsereignis von anderen auftretenden Ereignissen zu unterscheiden. Dies kann auch zu einer Beeinträchtigung der Netzwerkleistung führen.
Standard: 0
Mindestwert: 0
Empfohlener Wert: 10
Beispiel
SQLNET.EXPIRE_TIME=10
Antwort2
Haben Sie SSH-Zugriff? Sie könnten einen SSH-Tunnel einrichten und die SQL-Kommunikation darüber senden.
TOAD: Server (oder TNS-Namen) wird zu Localhost, Abhörport ist ein beliebiger Port wie 12346
PuTTY: Portweiterleitung. Quellport: 12346, Ziel: $REMOTE_IP:1521. Belassen Sie es als lokalen Port.
Stellen Sie sicher, dass Sie TCP-Keepalives in PuTTY über den Abschnitt „Verbindung“ aktivieren.
Antwort3
Ich habe dies auf der Dell-Site gefunden und bestätigt, dass es funktioniert (unter Toad 11.5.0.56): Verfügt Toad über eine Keep-Alive-/Intervallzeit-/Ping-Einstellung, sodass es nicht zu einer Zeitüberschreitung des Netzwerks kommt? (49507)
Zusammenfassend: Schalten Sie die Ausgabe im DBMS-Ausgabefenster ein, indem Sie auf das rote Schaltflächensymbol links in der DBMS-Ausgabemenüleiste klicken (es wird grün). Sie können darauf über die Registerkarte DBMS-Ausgabe neben der Registerkarte Datenraster oder über Ansicht -> DBMS-Ausgabe zugreifen.
Dadurch wird automatisch auch das Polling aktiviert. Meiner Erfahrung nach benötigen Sie sowohl DBMS OutputUndPolling aktiviert, um die Verbindung aufrechtzuerhalten.