Frage

Ich habe einen Lastausgleich bekommt ASP.Net 2.0-Anwendung auf IIS5 (nicht Sitzungsstatus verwenden) zurück zu einem einzigen Oracle 10g-Server ausgeführt wird, mit der Version 10.1.0.301 der ODAC / ODP.Net Treiber. Nach einer langen Zeit der Inaktivität (einige Stunden), die Anwendung wird scheinbar zufällig, eine Oracle-Ausnahme auslösen:

  

Ausnahme: ORA-03113: end-of-file auf dem Kommunikationskanal bei   Oracle.DataAccess.Client.OracleException.HandleErrorHelper (Int32   errCode OracleConnection anschl, IntPtr opsErrCtx, OpoSqlValCtx *   pOpoSqlValCtx, Objekt src, String-Verfahren) bei   Oracle.DataAccess.Client.OracleCommand.ExecuteReader (Boolean requery,   Boolean fillRequest, CommandBehavior Verhalten) bei   Oracle.DataAccess.Client.OracleCommand.System.Data.IDbCommand.ExecuteReader ()

     

... Oracle Teil des Stapels endet hier ...

Wir schaffen neue Verbindungen bei jeder Anfrage, haben die Öffnen und Schließen in einem try / catch umhüllter / endlich richtige Verbindung Verschluss zu gewährleisten, und das Ganze wird in einer mit (OracleConnection yadayada) gewickelten {...} Block . Dieses Problem tritt nicht auf den Neustart der ASP.Net-Anwendung verknüpft, nachdem für Inaktivität abgeschaltet wird.

Wir haben noch das Problem selbst zu reproduzieren. Gedanken, Gebete helfen?


Mehr:. mit geprüft, ist der Firewall nicht gesetzt Verbindungen zwischen den Servern zu töten

War es hilfreich?

Lösung

  

ORA-03113: end-of-file auf dem Kommunikationskanal

Ist die Datenbank so dass Sie wissen, dass die Netzwerkverbindung ist nicht mehr. Dies könnte daran liegen:

  1. Ein Netzwerkproblem - fehlerhafte Verbindung oder Firewall-Problem
  2. Der Serverprozess auf der Datenbank, die Sie starb unerwartet bedient.

1) ( Firewall ) suchen tahiti.oracle.com für SQLNET.EXPIRE_TIME. Dies ist ein sqlnet.ora Parameter, der regelmäßig ein Netzwerkpaket in einem konfigurierbaren Intervall dh sendet. Diese Einstellung der Firewall glauben machen, dass die Verbindung ist live

1) ( Netzwerk ) sprechen Sie mit Ihrem Netzwerk-Administrator (Verbindung unzuverlässig sein könnte)

2) Überprüfen Sie die alert.log auf Fehler. Wenn der Server-Prozess es versäumt wird eine Fehlermeldung sein. Auch wird eine Trace-Datei geschrieben worden Unterstützung zu ermöglichen, das Problem zu identifizieren. Die Fehlermeldung wird die Trace-Datei verweisen.

Support Fragen können erhöht werden metalink.oracle.com mit einem geeigneten Customer Service Identifier (CSI)

Andere Tipps

In Bestätigen Verbindung = true , um die Verbindungszeichenfolge.

Lesen Sie diesem Blog , um mehr über zu finden.

DETAILS: Nach OracleConnection.Close () die reale Datenbankverbindung nicht beendet. Das Verbindungsobjekt wird in Verbindung Pool zurückstellen. Die Verwendung von Verbindungspool ist implizit durch ODP.NET. Wenn Sie eine neue Verbindung erstellen erhalten Sie einen auf den Pool. Wenn diese Verbindung ist „noch offen“ die OracleConnection.Open () -Methode erstellt nicht wirklich eine neue Verbindung. Wenn die wirkliche Verbindung unterbrochen ist (aus irgendeinem Grund) Sie einen Fehler bei der ersten Auswahl erhalten, aktualisieren, einfügen oder löschen.

Mit Validate Anschluss der reale Verbindung in Öffnen validiert ist () -Methode.

Überprüfen Sie, ob es nicht eine Firewall, die die Verbindung nach einer bestimmten Zeit endet (dies war die Ursache für ein ähnliches Problem, das wir hatten)

  

end-of-file auf dem Kommunikationskanal:

Einer des Verlaufs dieses Fehlers ist aufgrund Datenbank nicht das Protokoll, wenn sein in der Phase der Öffnung schreiben;

Lösung überprüfen Sie die Datenbank, wenn ihr Lauf in ARCHIVELOG oder NOARCHIVELOG

Verwendung überprüfen

select log_mode from v$database;

Wenn es auf ARCHIVELOG versuchen, in NOARCHIVELOG zu ändern

durch sqlplus mit

  • startup mount
  • alter database NOARCHIVELOG;
  • alter database open;

, wenn es für das funktioniert

Dann können Sie Ihre flashrecovery Bereich anpassen seine möglicherweise, dass Ihr flashrecovery Bereich voll ist -> dann nach bestätigen, dass Ihr flashrecovery Bereich den Raum hat, können Sie Ihre Datenbank in die ARCHIVELOG ändern

Diese Fehlermeldung kann in den Anwendungsprotokollen geworfen werden, wenn das eigentliche Problem ist, dass der Oracle-Datenbank-Server aus dem Raum lief.

Nach dem Raum Problem zu korrigieren, ist diese besondere Fehlermeldung verschwunden.

Sie können diesen Registry-Hack versuchen:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"DeadGWDetectDefault"=dword:00000001
"KeepAliveTime"=dword:00120000

Wenn es funktioniert, halten Sie einfach die KeepAliveTime erhöhen. Es liegt derzeit bei 2 Minuten.

Der Artikel bereits erwähnt ist gut. http://forums.oracle.com/forums/thread.jspa?threadID= 191.750 (soweit es geht)

Ist dies nicht etwas ist, das häufig läuft (tut es nicht auf Ihrer Homepage), können Sie das Verbindungspooling deaktivieren.

Es gibt eine andere „Gotcha“, die nicht in dem Artikel erwähnt wird. Wenn das erste, was Sie versuchen, mit der Verbindung zu tun, ist eine gespeicherte Prozedur aufrufen, wird ODP HANG !!!! Sie werden nicht einen Fehlerzustand zurück zu verwalten, nur eine vollständige Bohrung HANG! Der einzige Weg, um es zu beheben ist auszuschalten Connection Pooling. Sobald wir das getan haben, alle Fragen gingen.

Pooling ist in einigen Situationen gut, aber auf Kosten einer erhöhten Komplexität rund um die erste Anweisung von jeder Verbindung.

Wenn die Fehlerbehandlung Ansatz ist so gut, warum nicht sie es machen eine Option für ODP es zu handhaben für uns ????

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top