Announcement

Collapse
No announcement yet.

Zeitweise ORA-12545 Fehler (target host or object does not exist) in MSSQL assembly

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zeitweise ORA-12545 Fehler (target host or object does not exist) in MSSQL assembly

    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

  • #2
    Hi,

    ich hab das Problem nun endlich lösen können.
    Letztendlich war es ein DNS settings problem.

    In meinem connection string übergebe ich unter anderem den hostname. Dieser liegt in der Form vor:

    serveralias.domain.domain (ja, es heißt sicher first level und second level domain, aber na ja)

    Beim Auflösen dieses hostnamens kam es nun zu Problemen. Aus Gründen, die mir jemand anders erklären mag, wird zu etwa 20 prozent als Ergebnis der Auflösung dieses hostnames eine normale ip addresse zurückgegeben.
    --> alles läuft super

    Aber zu 80 prozent wird die virtual ip des oracle servers zurückgegeben.
    Bei mir gab es nun das Problem, dass an dieser virtualip keine domäneninformationen (also das .domain.domain) dranhingen. Als dann also mit dieser "aufgelösten" addresse weitergearbeitet werden sollte, konnte kein oracle server gefunden werden.

    nach einem eintrag der virtuellen ip und den entsprechenden reellen ips in die host datei klappte dann alles wunderbar.
    Natürlich ist das nur temporär und wird demnächst durch eine dynamischere lösung ersetzt.

    Für bleiben nun noch zwei Verständnisfragen
    1. Warum wird mal die reelle und mal die virtuelle ip als Ergebnis der Auflösung zurückgegeben.

    2. Warum passiert genau dieser Fehler auch, wenn ich im connection string direkt die reelle ip angebe.

    viele Grüße

    Comment

    Working...
    X