Entwickler-Ecke

Datenbanken - ORA-12545: Connect failed because target host...


delphijanka - Mi 08.12.10 15:03
Titel: ORA-12545: Connect failed because target host...
ORA-12545: Connect failed because target host or object does not exist

Hallo.

Diese Fehlermeldung bekomme ich seit heute, wenn ich eine Verbindung zu der Datenbank aufbauen möchte.
Dabei geschieht der Zugriff aus SQL Developer heraus oder aus NetBeans problemlos, nur in Delphi klappt es nicht.
Gestern noch konnte ich die Verbindung aufbauen. Dann hat sich wahrschinelich vlcht was geändert (System-Admin-Änderungen etc..), was zu dem genannten Problem führen könnte.

Dabei nutze ich ADO-Connection-Klasse. Dem übergeb ich im ConnectionString den Provider, die DataSource und natürlich den Benutzer mit Passwort. Als DataSource übergebe ich die SID der Datenbank / des Datenbankschemas.

Brauche dringend Hilfe. Ohne Connection keine Arbeit möglich. :((


Martok - Mi 08.12.10 15:18

Ich würde sagen, da hat einer die TNSNames kaputtgespielt. Jedenfalls ist ein durchgedrehter ITler immer der Grund, wenn ich diesen Fehler sehe ;)

Geht denn ein Connect mit richtigem ConnectString, also Host/Port/Instance direkt angegeben?


delphijanka - Mi 08.12.10 15:25

@Martok

Erstmal Danke für die Antwort. Ich habe keine Ahnung, wie ich die Data Source dem ADO Connecter richtig (=syntaktisch) mitteilen soll. Habe versucht, der gibt mir die Message, dass TNS Resolving nicht klappte. Kannst du mir ein Beispiel für Data Source - Eingabe geben?


Martok - Mi 08.12.10 15:35

Hi - ahja, da sagt er es dann also auch mal an was los ist :roll:

Ich muss mal gucken, irgendwo hab ich eine Funktion, die den ConnectString baut. Mal sehen, ob die auf einer Platte ist die ich grade erreiche ;)
Ich editiers dann hier rein.

EDIT: Ich hab zwar eine Version von dem Programm hier - aber nicht die letzte. Die, die ich hier habe hatte noch tnsnames.ora benutzt.
Dafür hab ich das hier aus Google gefischt, wobei ich mir bei dem (SERVER=DEDICATED) nicht so sicher bin, ob man das braucht, ggf. also mal Handbuch lesen:

Quelltext
1:
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)))                    


Der Ausdruck wäre dann deine data source=....
Alternativ geht das auch in EZ-Connect-Syntax, aber da gabs irgend einen Haken dran. Ich weiß nur nicht mehr welchen. Also, neben der Tatsache dass es erst seit Ora 10 existiert :(

Das Ganze führt dann dazu, dass keine Auflösung mehr über TNS gemacht wird, sondern man direkt Host(-namen) und Port wissen muss. Meistens weiß man die ja, ist aber halt weniger komfortabel und vor allem schlechter wartbar. Unbedingt aus einer Konfigurationsdatei lesen sowas!
Ein Tutorial was ich grad gefunden hatte hat folgendes geschrieben:
If that happens, check with your Oracle Database Administrator to verify the name of your Host File, your User Name and Password.

Wenn die Firma klein genug ist kannst du ja mal versuchen rauszufinden wer da was warum geändert hat. Ab ner gewissen Größe ist das aber eher schwierig, da muss man dann eher mit den Konsequenzen leben ;)


delphijanka - Mi 08.12.10 16:54

Das hat geklappt. Danke!


jaevencooler - Mi 08.12.10 17:30

Moin,


nur zur Info zum Thema EZCONNECT:


1.) LogonDatabase := 'MeineIP:1521/MeinSID' , wobei 1521 der Standard Port von Oracle ist, kann auch anders konfiguriert werden.
2.) EZCONNECT Option in der sqlnet.ora eintragen (NAMES.DIRECTORY_PATH property)

das muss aber auf jeden Client gemacht werden, es sein denn die sqlnet.ora liegt irgendwo zentral.
Wenn du eine Beispiel Datei brauchst, dann sach Bescheid....

oder alternativ:

LogonDatabase := (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = MyServer)(PORT = 1521)))(CONNECT_DATA = (SERVICE_NAME = MyDB)))

mein Favorit....



Beste Grüße
Michael