Ich kann nicht glauben, dass ich diese Frage stellen muss, aber ich kann mich für mein Leben nicht mit einer Oracle 11g-Datenbank verbinden.
Das Folgende funktioniert bei der Verwendung von System.Data.OracleClient
- aber dies wird natürlich abgeschrieben ..__ Wenn ich genau den gleichen Code aber mit Oracle.DataAccess.OracleClient
verwende, erhalte ich die folgende Fehlermeldung
{"ORA-12545: Connect failed because target Host or object does not exist"}
Hier ist mein Code
using (OracleConnection con = new OracleConnection("Data Source=orac;User Id=SYSTEM; Password=Pass;"))
{
con.Open();
Console.WriteLine("Connection opened");
OracleCommand cmd2 = new OracleCommand("SELECT * FROM SYSTEM.TABLE", con);
OracleDataReader oracleDataReader = cmd2.ExecuteReader();
while (oracleDataReader.Read())
{
Console.WriteLine(oracleDataReader[0]);
}
}
Kann mir jemand helfen, was ich falsch mache?
Ich musste das Programm auf 32 Bit ändern, damit der Oracle.DataAccess.dll
geladen werden konnte.
Ist das überhaupt die richtige Bibliothek, die verwendet werden soll ???
Vielen Dank
EDIT
tnsnames.ora-Datei wie folgt:
# tnsnames.ora Network Configuration File:
C:\app\UserName\product\11.2.0\dbhome_3\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
ORAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orac.example.com)
)
)
LISTENER_ORAC =
(ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1522))
UPDATE
Ich habe versucht, eine Verbindung mit dem Oracle-SQL-Entwickler herzustellen. Dies funktioniert, solange ich den TNS-Verbindungstyp verwende, aber nicht funktioniert, wenn ich den Verbindungstyp Basic verwende.
Mir ist auch aufgefallen, dass in meinen Diensten 2 angerufen werden
OracleOraDb11g_home1TNSListener OracleOraDb11g_home2TNSListener
Das orac dbhome ist home3 Ich glaube, könnte dies das Problem sein? Wenn ja, weiß jemand, wie ich das Problem beheben würde?
Vielen Dank
UPDATE In HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\gibt es zwei Eigenschaften (Default) und inst_loc. Es gibt einige Ordner, von denen zwei mit "KEY_OraDb11g_home1" und "KEY_OraDb11g_home2" bezeichnet werden. Beide enthalten eine Eigenschaft mit dem Namen Oracle_HOME.
KEY_OraDb11g_home1 - Oracle_HOME = C:\app\Benutzername\product\11.2.0\dbhome_2 KEY_OraDb11g_home2 - Oracle_HOME = C:\app\Benutzername\product\11.2.0\dbhome_3
Die SID für die Datenbank in home1 heißt OracleDev. Ich habe sie vielleicht schon vor einiger Zeit installiert, aber ich brauche sie jetzt definitiv nicht, wenn sie ein Problem verursacht
Vielen Dank
EDIT
Lass uns etwas anderes versuchen.
Möglicherweise weiß ODP.NET nicht, wo Sie Ihr Oracle Home finden können, weil es nicht in Ihrer PATH-Umgebungsvariablen definiert ist oder wenn es nicht in der Registrierung festgelegt ist.
Überprüfen Sie Ihren PFAD und stellen Sie sicher, dass er Ihr Oracle Home-Verzeichnis und "Oracle Home\bin" enthält. Suchen Sie für die Registrierung nach HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\
. Darin sollte ein Schlüssel namens HOME0
mit dem Zeichenfolgenwert Oracle_HOME
enthalten sein. Stellen Sie sicher, dass es auf Ihr Oracle-Home zeigt.
Hatte ein ähnliches Problem:
Visual Studio verwendete die falsche Version von tnsnames.ora in ..\11.2.0\client_1\network\admin
TNS Ping hat die richtige Version von tnsnames.ora in ..\11.2.0\client_2\network\admin verwendet
Daher war tnsping erfolgreich, aber Visual Studio gab Folgendes zurück: ORA-12545: Verbindung fehlgeschlagen, weil Zielhost oder Objekt nicht vorhanden ist.
Lösung, wahrscheinlich nicht die beste, kopierte die korrekte Version von tnsnames.ora nach ..\11.2.0\client_1\network\admin
Ich weiß nicht warum, aber setze Host
auf 0.0.0.0
im tnsnames.ora
und listner.ora
hat für mich gearbeitet.
Natürlich musste lsnrctl start
Überprüfen Sie die Host-Datei unter C:\windows\system32\drivers\etc. Insbesondere, wenn der Computer VM ist und sich die IP-Adresse des lokalen Hosts möglicherweise ändert, wenn die IP-Adresse von VM nicht statisch ist. Ändern Sie ggf. die IP des lokalen Hosts in dieser Datei