Ich unterstütze einen IIS 7.5-Webserver und habe ein paar Probleme mit meinen App-Pools. Ich sehe, dass Anwendungen, die Verbindungen zu Oracle-Datenbanken verwenden, immer wieder aufhören zu funktionieren und den Fehler „ORA-12154: TNS: Die angegebene Verbindungskennung konnte nicht aufgelöst werden“ ausgeben. Was mich ärgert, ist, dass sich weder am Datenbankserver noch am Webserver oder innerhalb der App etwas geändert hat. Ich habe versucht, einen TNS-Ping an die Datenbank zu senden, und die Verbindung funktioniert einwandfrei. Apps im selben App-Pool, die SQL Server-Datenbanken verwenden, scheinen kein Problem zu haben.
WICHTIG: Wenn ich die App so ändere, dass sie zu einem anderen App-Pool gehört, funktioniert sie wieder. Wenn ich sie wieder zum ursprünglichen App-Pool zurückändere, bleibt der Fehler bestehen.
Was könnte hier passieren? Ich verstehe nicht, warum das Problem einfach aus heiterem Himmel auftaucht und nur bestimmte Pools betrifft.
Danke!
Antwort1
Versuchen Sie, Ihren TNS-Listener anzupingen, um zu sehen, ob er unter Linux etwa so aktiv ist:
tnsping oracle
...
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = oracle)))
...
OK (2311770 msec)
Wenn es aktiv ist, Sie aber keinen Status vom TNS-Listener abrufen können, gehen Sie folgendermaßen vor:
lsnrctl status
TNS-01153: Failed to process string: �9M0
Versuchen Sie, eine fehlerfreie Aktualisierung des Listeners mit dem folgenden Befehl zu erzwingen (auch hier suchen Sie unter Linux nach dem entsprechenden Windows Server-Befehl):
lsnrctl start oracle
TNS-01106: Listener using listener name LISTENER has already been started
Es könnte mit der Hardware und/oder einer fehlerhaften Oracle-Abstimmung und/oder einer fehlerhaften Oracle-Konfiguration zusammenhängen. Bei mir tritt genau der gleiche Fehler auf wie bei Ihnen, außer dass ich Apache-Tomcat als Webserver ausführe und mein Oracle-Dienst direkt nach dem Starten des Webservers stoppt (TNS: Listener-Fehler, und in meiner Webanwendung wird die Ausnahme „Socket Time Out“ angezeigt). Sie haben nicht die Möglichkeit, Ihre Anwendungen tatsächlich eine Zeit lang auszuführen, bevor der TNS-Dienst stoppt. Ich nehme an, das liegt am Betriebssystem.
Ich verwende eine virtuelle Maschine, VM Fusion mit installiertem CentOS 6.6. Diese VM läuft nur auf einem von drei verschiedenen Laptops einwandfrei. Ich kann bestätigen, dass es mit dem RAM-Speicher zusammenhängen könnte. Wie sieht der RAM Ihres Servers aus, wenn das passiert? Ich habe dies mehrere Male erhöht und das Problem wurde dadurch behoben, aber dann trat es wieder auf. Die einzige Möglichkeit, es zu beheben, bestand darin, den RAM zu überwachen und ihn automatisch zu bereinigen, wenn er das Maximum erreicht, und ihn dann zum Ausführen mit Folgendem zu zwingen:
lsnrctl start oracle