Nach einer Umstellung der Oracle-Datenbank beim Kunden, haben wir folgende Fehlermeldung in unserer ASP.NET-MVC-Webanwendung erhalten:
TNS: Listener kann in Connect-Deskriptor angegebenen Service aktuell nicht auflösen
Der Callstack („Aufrufstapel“) sah so aus:
OracleInternal.Network.NetworkException
bei OracleInternal.Network.OracleCommunication.DoConnect(String tnsDescriptor)
bei OracleInternal.ServiceObjects.OracleConnectionImpl.Connect(ConnectionString cs, Boolean bOpenEndUserSession)
Die Ursache war ein Fehler in der Verbindungszeichenfolge („Connection String“).
Statt folgendem Connection String:
DATA SOURCE=192.168.148.111:1530/SXY; User Id=MyUser; Password=MyPassword;
Haben wir diesen hier verwendet:
DATA SOURCE=192.168.148.111:1530/SXY**.EXAMPLE.ORG**; User Id=MyUser; Password=MyPassword;
Danach ging es.
Keine Ahnung, was da genau der Unterschied ist; entweder braucht der DNS wirklich den Full Qualified Name (was ich bezweifle, da wir ja die IP-Adresse schon angegeben hatten), oder es ist dieser Unterschied zwischen „SID“ und „Service-Name“.
Ersteres könnte die SID gewesen sein, letzteres, der Service-Name. Die neue Datenbank erwartet also immer den Service-Namen und nicht mehr die SID.