Zur detaillierten Anleitung

Werbung
MuM SupportPlus News 04/2017
Tipps & Tricks GIS und Infrastruktur
ODBC-Verbindungen in Oracle-Datenbanken nutzen
Bereits in der Vergangenheit haben wir verschiedene Möglichkeiten beschrieben, wie sich Daten aus
externen Quellen in AutoCAD Map über die ODBC-Verbindung nutzen lassen. In diesem Beispiel
wollen wir Ihnen zeigen, wie Sie die Tabellen einer Access-Datenbankanwendung in Oracle für die
Visualisierung von Geodaten verwenden können. Dabei steht Access synonym für alle relationalen
Datenbanken (z.B. MS SQL Server, MySQL), die über eine ODBC-Verbindung erreichbar sind. Im
Anschluss daran können Sie von Oracle aus über die ODBC-Verbindung SQL-Abfragen ausführen, aber
auch Datensätze hinzufügen und modifizieren.
Folgende Schritte sind ausschließlich auf dem Datenbankserver erforderlich, um eine Verbindung zu
einer ODBC-Datenquelle herzustellen:
1.
2.
3.
4.
5.
6.
ODBC-DSN erstellen
Oracle-Initialisierungsdatei erstellen
Listener erstellen
TNS-Name erstellen
Database-Link erstellen
Synonyme oder Views erstellen
Voraussetzung für einen erfolgreichen Zugriff auf die Access-Datenbank, bzw. andere Datenbank, ist
ein Treiber, der in der ODBC-Administration von Windows einen Provider hinzufügt, über den sich die
externe Datenbank ansprechen lässt. Für alle gängigen Datenbanken lassen sich in der Regel Provider
im Internet zum Download finden. Im Falle der Access-Datenbank können Sie die Access Database
Engine für Office 2010 x64 nutzen.
ODBC-DSN erstellen
Starten Sie auf dem Datenbank-Server den
ODBC-Administrator
(C:\Windows\System32\odbcad32.exe) und
wechseln in die Registerkarte System-DSN.
Klicken Sie auf die Schaltfläche Hinzufügen, wählen
aus dem nachfolgenden Dialog den gewünschten
Provider aus und klicken auf Fertigstellen.
1
MuM SupportPlus News 04/2017
Tipps & Tricks GIS und Infrastruktur
Es erscheint der Konfigurationsdialog der ODBCVerbindung. Dieser Dialog unterscheidet sich je nach
verwendeter Datenbank. Bei einer Microsoft AccessDatenbank klicken Sie auf die Schaltfläche
Auswählen, um die Datenbankdatei zu wählen. Diese
sollte auf einem Festplattenlaufwerk des OracleDatenbankservers liegen. Tests, die Datei von einem
Netzlaufwerk von Oracle aus anzusprechen, waren
nicht erfolgreich.
Klicken Sie auf die Schaltfläche Erweitert, um Zum Abschluss vergeben Sie noch einen kurzen, aber
ggf. einen Anmeldenamen und ein Passwort
prägnanten Namen für die Datenquelle. Beenden Sie
für den Zugriff auf die Datenbank einzugeben. den Dialog mit OK.
Oracle-Initialisierungsdatei erstellen
Als nächstes melden Sie die ODBC-Datenquelle im Oracle an. Dazu muss beim Start des ListenerDienstes im $ORACLE_HOME/hs/admin eine Initialisierungsdatei gefunden werden, die den Namen
der ODBC-Datenquelle enthält.
2
MuM SupportPlus News 04/2017
Tipps & Tricks GIS und Infrastruktur
Dazu erstellen Sie eine Kopie der Datei initdg4odbc.ora
und benennen sie so um, dass sie mit init beginnt und
der Datenquellenname folgt.
Anschließend öffnen Sie die Datei in einem Editor und
tragen hinter HS_FDS_CONNECT_INFO den Namen der
System-DSN oder aber die vollständige DSN-Information
ein.
Hinter HS_DB_NAME fügen Sie den Namen der
Datenbank ein, wie sie innerhalb der Oracle-Umgebung
erkannt werden soll. Bitte beachten Sie, dass dieser
Name maximal 8 Zeichen lang sein darf. Schreiben Sie
idealerweise den DB_NAME und den DSN-Namen in
Großbuchstaben.
Speichern und schließen Sie die Datei.
Listener erstellen
Öffnen Sie im Verzeichnis $ORACLE_HOME/network/admin die listener.ora in einem Editor und
fügen Sie in der Liste der Listener einen weiteren Eintrag hinzu. Speichern und schließen Sie
anschließend die Datei.
Die Liste der Listener könnte also so aussehen:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\app\oracle\product\12.1.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle\product\12.1.0\dbhome_1\bin\oraclr12.dll")
)
(SID_DESC =
(SID_NAME = GF_WI_MDB)
(ORACLE_HOME = C:\app\oracle\product\12.1.0\dbhome_1)
(PROGRAM = dg4odbc)
)
)
Um die Änderungen wirksam werden zu lassen, werden wir später den Listener neustarten.
TNS-Name erstellen
Mit der Änderung in der Listener-Liste kann die Datenbank nun die Anfrage an die ODBC-Datenbank
entgegennehmen. Damit Sie jedoch auch eine Anfrage an die ODBC-Datenbank senden können, muss
die Liste der TNS-Namen um den entsprechenden Eintrag erweitert werden.
Öffnen Sie also im im selben Verzeichnis $ORACLE_HOME/network/admin die tnsnames.ora in
einem Editor und fügen Sie einen weiteren Eintrag hinzu. Speichern und schließen Sie die Datei.
GF_WI_MDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = GISSERVER)(PORT = 1521))
3
MuM SupportPlus News 04/2017
Tipps & Tricks GIS und Infrastruktur
(CONNECT_DATA =
(SID = GF_WI_MDB)
)
(HS = OK)
)
Database-Link erstellen
Starten Sie die MS-DOS-Eingabeaufforderung mit administrativen Privilegien und geben Sie
nacheinander die Befehle lsnrctl stop und lsnrctl start ein, um den Listener neu zu starten. In der
Rückmeldung erkennen Sie bereits die zusätzliche Verbindung zur ODBC-Datenbank.
Melden Sie sich nun an der Datenbank an und erstellen testweise einen öffentlichen Datenbanklink,
um die Funktionalität zu überprüfen.
Syntax:
create public database link <db_name> connect to <odbc_user> identified by <odbc_pass> using
<tns_name>; Beispiel:
create public database link GF_WI_LNK connect to Administrator identified by admin using
'GF_WI_MBD';
Test:
select * from dual@GF_WI_LNK;
Benutzername und Passwort müssen mit den Zugangsdaten übereinstimmen, die Sie in den
erweiterten Einstellungen in der ODBC-Administration eingetraten haben. Haben Sie in der AccessDatenbank hingegen keinen Benutzernamen und Passwort vergeben und die Anmeldedaten in den
erweiterten Einstellungen der ODBC-Verbindung bleiben leer, dann können Sie bei der Erstellung des
Database Links beliebige Zugangsdaten eintragen.
4
MuM SupportPlus News 04/2017
Tipps & Tricks GIS und Infrastruktur
Jetzt können Sie auch Datensätze manipulieren. Achten Sie auch hier darauf, dass die Transaktion mit
COMMIT abgeschlossen werden muss, um die Änderungen anzuwenden.
Allerdings sollten Sie sich überlegen, ob die Datenbankverbindung wirklich PUBLIC, also für
jedermann lesend wie schreibend zur Verfügung stehen soll. Das ist aber abhängig von der jeweiligen
Situation und der zugrundeliegenden Aufgabenstellung.
Soll beispielsweise lediglich eine Tabelle für den lesenden Zugriff referenziert werden, erstellen Sie in
einem eigenen User eine View auf die ODBC-Tabelle und vergeben eine GRANT SELECT-Berechtigung
an die berechtigten Fachschalen.
Im abschließenden Beispiel wollen wir demonstrieren, wie Sie für alle Tabellen der ODBCDatenquelle automatisiert Views erstellen, und diese in einer Fachschale anwenden.
-- Liest alle Tabellen der Access-Datenbank aus
select table_name from user_tables@gf_wi_lnk where table_name not like 'MSys%' and not table_name
in ('tmp') order by table_name;
-- Erzeugt eine Liste von SQL-Statements, um Views für den Zugriff auf die ODBC-Tabellen
select 'create or replace view '||upper(table_name)||' as select * from
'||upper(table_name)||'@gf_wi_lnk;' as text from user_tables@gf_wi_lnk where table_name not like
'MSys%' and not table_name in ('tmp') order by table_name;
5
MuM SupportPlus News 04/2017
Tipps & Tricks GIS und Infrastruktur
Bitte beachten Sie dabei, dass Sonderzeichen in den Namen von Tabellen, Ansichten und
Feldbezeichnern in Oracle problematisch sind. Benennen Sie diese in der Accessdatenbank ggf. um.
Feldbezeichner können Sie auch innerhalb von Oracle überschreiben.
-- Überschreibt die Feldbezeichner einer Tabelle
CREATE OR REPLACE VIEW T_ART AS
select "Art" ART,"Art_lang" ART_LANG from T_ART@gf_wi_lnk;
Dann können Sie die Werte in Ansichten verknüpfen oder auch Referenzen aus der ODBCDatenquelle in der Fachschale speichern.
6
Herunterladen