2012-08-28 9 views
6

Ich versuche, eine Einfügung mit einer potenziell großen Menge von Binärdaten in eine Remote-Oracle (11g) -Datenbank mit Entity Framework (ODP.Net) zu tun. Es funktioniert gut für wirklich kleine Dateien (< 5 KB), aber für größere (z. B. 44 KB) bekomme ich einen Fehler: "ORA-03135: Verbindung verloren Kontakt"."ORA-03135: Verbindung verloren Kontakt" beim Einfügen großer Datei

Ich glaube nicht, es ist Zeitüberschreitung, da die Ausnahme innerhalb einer Sekunde nach der Ausführung des Befehls auftritt.

Ich habe versucht, die beiden folgenden in meiner Verbindungszeichenfolge einstellen, aber ohne Erfolg:

  • Validate Connection=true
  • Pooling=false

ich in der listener.log Datei auf dem entfernten Rechner auch aussehen. Es zeigt die getätigten Verbindungen, aber keine Anzeichen von Ausnahmen oder abgebrochenen Verbindungen.

Ich bin für vorgeschlagene Fixes oder Methoden zur Fehlerbehebung.

Edit:

Die gleiche SQL-Operationen arbeiten, wenn im lokalen Netzwerk auf eine Oracle-Instanz zugreifen.

+0

Nun, vielleicht ist es nicht, aber ich hatte die "ORA-03135: Verbindung verloren Kontakt" auf seltsame Sachen, wenn die Verbindung überhaupt nicht verloren wurde dass Oracle die eingereichte SQL-Anweisung nicht mehr schlucken konnte. Ich habe es auf große Anfragen (> 2000 Codezeile) bekommen. Vielleicht schicke ich dich auf den richtigen Weg, aber ich dachte, nach 4 Stunden keine Antwort könnte ich dir wenigstens dieses Stück meiner eigenen Erfahrung erzählen. Für mich sah es so aus, als würde die Nachricht immer erscheinen, wenn der Parser des SQL-Befehls im Hintergrund abgestürzt ist. – hol

+0

Es lohnt sich möglicherweise, das Warnprotokoll auf dem Remotecomputer zu überprüfen, um festzustellen, ob ein Fehler gemeldet wurde. Wenn nicht, deutet das möglicherweise auf das Problem beim Client und nicht beim Server hin. Gibt es auch irgendwelche Firewalls auf dem Weg oder irgendetwas anderes auf Netzwerkebene, das Protokolle haben könnte, die Sie überprüfen können? –

+0

Ein Netzwerkprotokoll wäre hilfreich. Die Firewall ist nicht aktiviert und es handelt sich um einen Windows-Servercomputer, der Oracle hostet. Ich bin mir nicht sicher, wo TCP-Verkehr auf einem Windows-Rechner angemeldet ist, aber ich muss das vielleicht herausfinden. –

Antwort

3

Dies kann ein kompliziertes Problem mit vielen verschiedenen möglichen Ursachen und Lösungen sein. Hier starten:

http://www.dba-oracle.com/t_ora_03135_connection_lost_contact.htm

Answer: The oerr utility shows this for the ORA-03135 error:

ORA-03135: connection lost contact

Cause: 1) Server unexpectedly terminated or was forced to terminate. or 2) Server timed out the connection.

Action: 1) Check if the server session was terminated. 2) Check if the timeout parameters are set properly in sqlnet.ora.

The ORA-03135 error is common when connecting remotely when a firewall terminates the connection.

One solution for the ORA-03135 error is to increase the value of the sqlnet.ora expire_time parameter in the sqlnet.ora file or to check for a expire parameter in a SQL*Plus profile.

To diagnose the ORA-03135 error, start by checking to see if the OS PID still exists, using the ps –ef|grep syntax.

Check to see if there is a Network Address Translation (NAT) between the client and server

In Windows, check to see if a Windows firewall is checking for your local connections:

Windows XP -> Control panel -> security -> Tab "Advanced"

Also, setting the parameters sqlnet.inbound_connect_timeout and inbound_connect_timeout_listenername to 0 can stop the ORA-03135 error.

auch wie oben, überprüfen Sie die Datenbank-Alert-Protokoll auf Fehler in der gleichen Zeit wie die Verbindung Abwurf auftreten. Manchmal kann dies zum Beispiel durch ora-600 oder ora-7445 verursacht werden. Es sollte nicht im Listener-Protokoll angezeigt werden, da Sie nur diesen Fehler erhalten, nachdem das Handshaking abgeschlossen wurde.

+0

Ich habe dieses Problem seit einiger Zeit nicht mehr untersucht, aber da die hier beschriebenen Methoden zur Problemlösung ziemlich vollständig aussehen, schreibe ich sie als Antwort. –

0

Diese Situation, die im Allgemeinen durch Verbindung getrennt/veraltet verursacht wird, wird vom Verbindungspool übernommen. Wenn Sie diese Ausnahme nach Pooling = false erhalten, blockiert die Firewall höchstwahrscheinlich die Verbindung aufgrund von tcp idle timeout. Stellen Sie sicher, tcp Idle Timeout-Wert ist größer als erwartet Befehl Ausführungszeit

Verwandte Themen