Hi Datenbankprofis,
ich hoffe, jemand von euch kann mir bei meinem Problem helfen. Vielen Dank schon mal!
Ich möchte von einem MSSQL Server (Enterprise 2005) per CLR Assembly (C#) auf eine Oracle Datenbank zugreifen.
Dazu nutze ich allerdings nicht die tnsnames.ora von oracle sondern gebe alle hostdaten im connection string an. Dieser connection string hat im groben folgendes aussehen (hab hier schon viel rumexperimentiert):
Provider=OraOLEDB.Oracle;Data Source=(DESCRIPTION = (ADDRESS_LIST=(LOAD_BALANCE = yes) (ADDRESS = (PROTOCOL = TCP)(HOST = [hostname])(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = [hostname])(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = [hostname])(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = [SName]) (FAILOVER_MODE = (TYPE = SELECT) (METHOD = BASIC) (RETRIES = 180) (DELAY = 5) ) ) );User ID=[User]; Password=[UserPWD];
Ich habe es hier schon mit den virtuellen ips versucht, mit dem alias, mit dem vollen namen (name.domain…).
Das Problem, das nun auftritt ist, dass die Verbindung zur oracle db ab und zu mal klappt (also wenn ich das clr assembly ausführe innerhalb dem mssql server), dann wieder nicht, dann wieder ja. Dem Anschein nach völlig willkürlich.
Das zusätzlich verwirrende ist auch noch, dass die verbindung von einem server auf meiner arbeit jederzeit wunderbar klappt. die problem treten von einem externe rechenzentrum aus auf (andere ip range). aber eben nur periodisch.
die Fehlermeldung, die geworfen wird, ist dann folgende:
System.Data.OleDb.OleDbException: ORA-12545: Connect failed because target host or object does not exist
System.Data.OleDb.OleDbException:
at System.Data.OleDb.OleDbConnectionInternal…ctor(OleDbConnectionString constr, OleDbConnection connection)
at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.OleDb.OleDbConnection.Open()
Die DNS Einstellungen dieses externen servers sind auch alle gesetzt. TNSping klappt auch wunderbar.
Load Balance im connection string habe ich auch schon verändert (yes/no).
So langsam gehen mir die Ideen aus. Wie gesagt, auf einem anderen Server (andere ip range) klappt alles wunderbar, und zwar mit jedem connection string, zu jeder zeit, ohne das dort extra dns settings gemacht wurden auch auch ohne tnsnames.ora oder sonstige oracle config files.
Es wäre toll, wenn ich vielleicht weitere lösungsanregungen hier bekommen würde. Aber erstmal danke fürs lesen dieses langen threads
vg Falk