Access als Frontend für Oracle?

Hallo!

Ich möchte gerne Access 2000 als Frontend für Oracle 8.0.5.0.0 benutzen, beides läuft auf WinNT in der Server-Version. Im Punkt „Link Tables“ habe ich „ODBC Databases“ und dann den entsprechenden DSN-Eintrag unter „Machine Data Source“ ausgewählt. Im danach auftauchenden Popup Menü habe ich noch mal den DSN-Namen und den Namen des Admins mit Paßwort für Oracle eingegeben.

Es funktioniert leider nicht:

ODBC--call failed 
[Oracle][ODBC][ORA]12154 TNS could not resolve service name (#12154) 
[Microsoft][ODBC Driver Manager] Driver's SQLSetConnectAttr failed (#0)

Ich habe jedoch bereits für ein anderes Programm einen DSN-Eintrag vorgenommen und kann Oracle damit auch problemlos über ODBC ansprechen. Warum geht es von Access aus nicht? Was mache ich falsch?

Grüße, Tanja

Hallo Tanja,

ich weiss auch nicht genau wo Dein Problem liegt, aber wenn Du folgende Schritte durchführst, dann findest Du es sicher selbst.

  1. Der Servicename
    Er muss in der Datei tnsnames.ora eingetragen sein.
    Diese Datei befindet sich im orant\net80\Admin-Verzeichnis

  2. Prüfen ob der Eintrag auch wirklich funktioniert
    tnsping

tnsping ist ein kleines DOS-Programm im orant-Verzeichnis

  1. ODBC-Treiber einrichten
    Dort kann man gleich den getesten Servicenamen, den User und das Paßwort eintragen. Wenn man will

  2. neue Tabelle über ODBC anlegen

Wenn die Punkte 1 bis 3 geklappt haben, muß Nr. 4 auch gehen.

Gruß
Niko

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,

Ich habe jedoch bereits für ein anderes Programm einen
DSN-Eintrag vorgenommen und kann Oracle damit auch problemlos
über ODBC ansprechen. Warum geht es von Access aus nicht? Was
mache ich falsch?

  1. Der Servicename
    Er muss in der Datei tnsnames.ora eingetragen sein.
    Diese Datei befindet sich im orant\net80\Admin-Verzeichnis

Es kann sein, daß der ODBC-Treiber von Access 2000 eine andere SQLNet-Version verwendet (Versionsnummer weiß ich jetzt nicht aus dem Kopf). Dann muß sich die tnsnames.ora im Verzeichnis orant\network\admin befinden! Das würde erklären, warum das mit einem anderen Programm funzt.

Gruß

J.

Hallo Niko!

  1. Der Servicename
    Er muss in der Datei tnsnames.ora eingetragen sein.
    Diese Datei befindet sich im orant\net80\Admin-Verzeichnis

Aha, also ich denke, daß hier der Fehler liegt, da kein Servicename angegeben war. Ich habe jetzt mal folgendes in die tnsnames.ora reingeschrieben:

BBNH1E65.BBN.HP.COM =
 (DESCRIPTION =
 (ADDRESS\_LIST =
 (ADDRESS = (PROTOCOL = TCP)(HOST = BBNH1E65)(PORT = 1521))
 )
 (CONNECT\_DATA =
 (SERVICE\_NAME = ORACLE)
 )
 ) 

Ist das OK so?

  1. Prüfen ob der Eintrag auch wirklich funktioniert
    tnsping

tnsping ist ein kleines DOS-Programm im orant-Verzeichnis

D:\orant\bin\>tnsping ORACLE

TNS Ping Utility for 32-bit Windows: Version 2.3.4.0.0 - Production on 19-JUL-01
 08:53:26

Copyright (c) Oracle Corporation 1995. All rights reserved.

TNS-03505: Failed to resolve name

Hm, also irgendetwas scheint hier immer noch nicht zu stimmen, was mache ich falsch? Wird die tnsnames.ora automatisch neu gelesen, wenn sie verändert wurde?

Grüße, Tanja

Hallo Tanja!

  1. Der Servicename
    Er muss in der Datei tnsnames.ora eingetragen sein.
    Diese Datei befindet sich im orant\net80\Admin-Verzeichnis

BBNH1E65.BBN.HP.COM =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = BBNH1E65)(PORT =
1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORACLE)
)
)

Ist das OK so?

Können wir nicht wissen, denn wir kennen Deine Maschine und die darauf laufenden Services nicht. Folgende Begriffe sollten geklärt werden:

BBNH1E65.BBN.HP.COM =

Das ist Dein Servicename, d.h. ein Alias, über den Du Deine Datenbankinstanz ansprechen kannst.

 (DESCRIPTION =
 (ADDRESS\_LIST =

Diese beiden Teile beschreiben den Service. Wenn der Service nicht verteilt ist, kannst Du die Angabe „ADRESS_LIST“ weglassen.

 (ADDRESS = (PROTOCOL = TCP)(HOST = BBNH1E65)(PORT = 1521))

Das ist die Adresse Deiner Instanz: Über TCP/IP horcht ein Listener auf dem Rechner BBNH1E65, Port 1521 und wartet auf SQLNet-Anfragen.

# Falsch:
# (CONNECT\_DATA =
# (SERVICE\_NAME = ORACLE)
# Richtig:
 (CONNECT\_DATA = 
 (SID = ORCL)

Das ist der Name der Instanz, die auf der Maschine läuft. Wenn Du mit Standardwerten arbeitest, dürfte hier ORCL stehen. Das solltest Du prüfen.

Dein Eintrag sollte dann etwa so aussehen:

BBNH1E65.BBN.HP.COM = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = BBNH1E65)(PORT = 1521)) (CONNECT\_DATA = (SID = ORCL)) )
  1. Prüfen ob der Eintrag auch wirklich funktioniert
    tnsping

D:\orant\bin>tnsping ORACLE

Das ist auch nicht richtig. Tnsping checkt, ob Du zum angegebenen Servicenamen connecten kannst, also

tnsping BBNH1E65.BBN.HP.COM

bzw, wenn BBN.HP.COM deine Standard-Domain ist, dann

tnsping BBNH1E65

Das müßte klappen.
Die DSN, die Du über Access einrichtest, bezieht sich auch auf den Service-Namen BBNH1E65.

Hoffe geholfen zu haben.

Gruß

J.

Hallo Jose!

Danke für die Erklärung der tnsnames.ora, jetzt ist es klar und sie sieht so aus:

CEDB =
 (DESCRIPTION =
 (ADDRESS = (PROTOCOL = TCP)(HOST = BBNH1E65.BBN.HP.COM)(PORT = 1521))
 (CONNECT\_DATA = (SID = ORCL))
 )

Können wir nicht wissen, denn wir kennen Deine Maschine und
die darauf laufenden Services nicht.

Ich muß also zunächst noch den Service CEDB (einen Listener?) einrichten, kannst Du mal für Oracle DAUs erklären, wie man das macht? Dann müßte es doch auch möglich sein, von anderen Rechnern über SQLNet auf Oracle zuzugreifen, oder?

Grüße, Tanja

Hallo Jose!

Danke für die Erklärung der tnsnames.ora, jetzt ist es klar
und sie sieht so aus:

CEDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =
BBNH1E65.BBN.HP.COM)(PORT = 1521))
(CONNECT_DATA = (SID = ORCL))
)

Können wir nicht wissen, denn wir kennen Deine Maschine und
die darauf laufenden Services nicht.

Ich muß also zunächst noch den Service CEDB (einen Listener?)
einrichten, kannst Du mal für Oracle DAUs erklären, wie man
das macht? Dann müßte es doch auch möglich sein, von anderen
Rechnern über SQLNet auf Oracle zuzugreifen, oder?

OK.
Auf der Datenbankmaschine BBNH1E65.BBN.HP.COM muß ein Listener laufen. Dazu mußt Du auf dieser Maschine auf $ORACLE_HOME/network/admin (bzw. %ORACLE_HOME%\Net80\Admin, wenn NT und Oracle 8.0.x) eine Konfiguratíonsdatei listener.ora einrichten, die diesem mitteilt, für welche Instanzen er lauschen soll. Die Datei hat folgenden Inhalt:

LISTENER = 
 (ADDRESS\_LIST = 
 (ADDRESS= 
 (PROTOCOL=TCP) 
 (HOST=BBNH1E65.BBN.HP.COM) 
 (PORT=1521) 
 ) 
 ) 
SID\_LIST\_LISTENER = 
 (SID\_LIST = 
 (SID\_DESC = 
 (GLOBAL\_DBNAME = ORCL) 
 (SID\_NAME = ORCL) 
 ) 
 (SID\_DESC = 
 (SID\_NAME = extproc) 
 (PROGRAM=extproc) 
 ) 
 ) 

Das bedeutet: Du definierst einen Listener namens LISTENER auf dem entsprechenden Host und Port mit Protokoll TCP/IP; daraufhin definierst Du, welche Instanzen der Listener LISTENER betreut, nämlich ORCL und extproc. Letztere dient dazu, externe Prozeduren auf dem Server laufen zu lassen; sie ist nicht unbedingt notwendig.
Danach startest Du auf der Maschine den Listener; wenn er schon läuft, mußt Du ihn vorher stoppen:

lsnrctl stop
lsnrctl start

Nach dem letzten Befehl sollte sowas zu sehen sein:

Services Summary...
 ORCL has 1 service handler(s)
 extproc has 1 service handler(s)
The command completed successfully

Die Einstellungen der tnsnames.ora werden auf der Clientmaschine getätigt; soll man sich von der Datenbankmaschine aus über den Listener connecten, dann werden diese auch dort eingerichtet.

Läuft der Listener, dann kannst Du mit

tnsping cedb

überprüfen, ob ein Connect möglich ist. Das sollte nun eigentlich klappen.
Dann kannst Du überprüfen, ob Du Dich mit SQLPlus connecten kannst:

sqlplus user/password@cedb 

Wenn das geht, dann sollte auch ODBC klappen.
Wenn nicht, mail mir bitte Deine Konfigurationsdateien!

Gruß

J.

1 Like