Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Keine Daten mehr vom Socket zu lesen

Allgemeiner Rat zur Fehlerbehebung „Keine weiteren Daten zum Lesen vom Socket“-Fehler.

Diese Fehler werden normalerweise durch einen anderen schwerwiegenden Fehler verursacht, z. B. einen ORA-600-Fehler. Ein so schwerwiegendes Problem, dass der Serverprozess abstürzte und nicht einmal eine richtige Fehlermeldung an den Client senden konnte. (Ein weiterer häufiger Grund für diese Fehler ist eine Netzwerkunterbrechung, die durch SQLNET.EXPIRE_TIME oder einen anderen Prozess verursacht wird, der alte Sitzungen beendet.)

Sehen Sie sich das Warnprotokoll an, um die ursprüngliche Fehlermeldung herauszufinden.

Suchen Sie in diesem Verzeichnis nach der Datei alert_[name].log:select value from v$parameter where name = 'background_dump_dest';

Nachdem Sie die spezifische Fehlermeldung und Details gefunden haben, gehen Sie zu support.oracle.com. Verwenden Sie das "ora-600-Tool" und suchen Sie dann die erste Nummer nach der ORA-600-Nachricht.

Normalerweise gibt es einen oder mehrere Artikel für diesen speziellen Typ von ORA-600-Fehler. Verwenden Sie die genaue Version und Plattform, um die Liste möglicher Fehler einzugrenzen. (Aber seien Sie nicht überrascht, wenn die „Betroffenen Versionen“ in dem Artikel falsch sind. Die Behauptungen von Oracle „behoben in Version x.y“ sind nicht immer wahr.)

Die Artikel erläutern in der Regel ausführlicher, wie das Problem aufgetreten ist, mögliche Problemumgehungen und eine Lösung, die normalerweise einen Patch oder ein Upgrade umfasst.

In der Praxis will man selten lösen diese Probleme. Der "typische" Rat lautet, sich an den Oracle Support zu wenden, um zu überprüfen, ob Sie wirklich das gleiche Problem haben, einen Patch zu erhalten, die Erlaubnis zu erhalten und die Umgebung(en) herunterzufahren und dann den Patch anzuwenden. Und dann wahrscheinlich feststellen, dass der Patch nicht funktioniert. Herzlichen Glückwunsch, Sie haben gerade viel Zeit verschwendet.

Stattdessen können Sie es normalerweise vermeiden das Problem mit einer subtilen Änderung an der Abfrage oder Prozedur. Es gibt viele Funktionen in Oracle, es gibt fast immer einen anderen Weg, dies zu tun. Wenn der Code am Ende etwas seltsam aussieht, fügen Sie einen Kommentar hinzu, um zukünftige Programmierer zu warnen:"Dieser Code sieht seltsam aus, um Fehler X zu vermeiden, der in Version Y behoben werden sollte."

Spezielle Hinweise für diesen Kodex

Wenn das wirklich Ihre gesamte Prozedur ist, sollten Sie sie durch etwas wie das Folgende ersetzen:

insert into local.tab3(col1, col2, col3, col4)
select tab1.col1, tab1.col2, tab2.col1, tab2.col2
from [email protected] tab1
join [email protected] tab2
    on tab1.col1 = tab2.col1
    and tab1.col2 = tab2.col2;

Im Allgemeinen sollten Sie Dinge nach Möglichkeit immer in SQL erledigen. Vor allem, wenn Sie vermeiden können, viele Cursor zu öffnen. Und besonders wenn Sie vermeiden können, viele Cursor zu einer entfernten Datenbank zu öffnen.