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(Ol eDbConnectionString constr, OleDbConnection connection)
at System.Data.OleDb.OleDbConnectionFactory.CreateCon nection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.Creat eNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
at System.Data.ProviderBase.DbConnectionFactory.GetCo nnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenCo nnection(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).
Ich habe desweiteren auf besagtem "problem server" nun auch die tnsnames.ora installiert und die entsprechenden umgebungsvariblen (oracle_home und tns_admin) gesetzt. die einstellungen sollten auch funktionieren, da ein tnsping auf den servicename (aus der tnsnames) funktioniert hat.
Alles ohne erfolg, weiterhin geht es oder geht es nicht.
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 :-D
vg Falk
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(Ol eDbConnectionString constr, OleDbConnection connection)
at System.Data.OleDb.OleDbConnectionFactory.CreateCon nection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.Creat eNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
at System.Data.ProviderBase.DbConnectionFactory.GetCo nnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenCo nnection(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).
Ich habe desweiteren auf besagtem "problem server" nun auch die tnsnames.ora installiert und die entsprechenden umgebungsvariblen (oracle_home und tns_admin) gesetzt. die einstellungen sollten auch funktionieren, da ein tnsping auf den servicename (aus der tnsnames) funktioniert hat.
Alles ohne erfolg, weiterhin geht es oder geht es nicht.
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 :-D
vg Falk
Comment