Problemstellung
- Bestimmte Geschäftsbereiche erwarten ein Reporting über Informationsquellen, die auf mehrere Applikationen und Datenbankserver verteilt sind
- In der Praxis kann dieses Problem auf der Clientseite – oder auf der Serverseite gelöst werden.
Eine Serverseitige Lösung hat denn Vorteil, dass auch SQL-Abfragen über mehrere Datenbanken hinweg möglich sind.
- Welche Geräte sind die Datenbank A aufgeführt, die in Datenbank B nicht enthalten sind.
- Eine Clientseitige Lösung hat den Vorteil, dass sich die Server nicht gegenseitig „sehen“ müssen
- Die Alternative der Replikation der Daten von einer Datenbank in ein anderes DBMS kann als Alternative bei intensiven Abfragen über gemeinsame Zusammenhänge in Betracht gezogen werden.

Die Basis, Oracle – zu Oracle – Database-Link
Eine Oracle Datenbank kann sich auf einer anderen Datenbank als Client connecten.
Um dieses Script zu verwenden, muss der DB-Name der entfernten Datenbank in der der Datei TNSNAMES.ORA hinterlegt sein.
DbLinkName
CONNECT TO USERNAME IDENTIFIED BY PASSWORT
USING ‘DB_Name‘;
select * from tabellenName@DbLinkName;
zugegriffen werden
MEINE_CMDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.5.2)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
Oracle zu MySQL-Datebase-Link
- Kernstück sind HS-Services (Middleware) der Oracle-Datenbank, die fremde Datenbanken wie einen Client connecten und diese Fremde Datenbank dann wie eine Oracle-Datenbank dann verfügbar machen.
- Auf Grund unterschiedlichen Datentypen und Syntax sollte man jede in der Oracle-DB verfügbar gemachte fremde MySQL-Tabelle über einen View verfügbar machen
Installationsschritte
- Zugriff auf die MySQL-Datenbank ermöglichen mittels
Grant select on …. ,und anschließend flush privileges… - MySQL-ODBC-Treiber unter Windows installieren, auf dem die Oracle-DB läuft. In der Systemsteuerung
- ODBC Data Source Administrator
- System DSN -> Ad
- HS Service konfigurieren (unter Oracle XE)
C:\oraclexe\app\oracle\product\10.2.0\server\hs\admin
Neue Datei „initmyodbc.ora“ anlegen, Inhalt:# HS init parameters HS_FDS_CONNECT_INFO = myodbc HS_FDS_TRACE_LEVEL = 0
- TNSNAMES.ora konfigurieren, MyODBC-Eintrag hinzufügen
myodbc =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(Port = 1521))
)
(CONNECT_DATA =(SERVICE_NAME = myodbc)
)
(HS = OK)
) - Listener.ora im gleichen Verzeichnis anpassen und SID_LIST erweitern
(SID_DESC =
(ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
(SID_NAME = myodbc)
(PROGRAM = hsodbc)
)
Ggf. Dienste neu starten! - DB-Link unter Oracle einrichten
–create database link myodbc connect to „mysqlusername“ identified by „mysqluserpassword“ using ‚myodbc‘;
- Kontrolle, – select * from mysqltabelle@myodbc; geht.
Oracle- zu MySQL-Views erstellen
Viele Tests haben zu dem Ergebnis geführt, dass die Nutzung der MySQL-Tabellen in komplexen SQL-Statements in der Oracle-DB nur über Views in der dargestellten Form möglich ist. Ggf. muss auf der MySQL-Seite eine Typkonvertierung stattfinden, so dass nur kompatible Datentypen sichtbar gemacht werden!
Je nach ODBC-Connection kann man eine implizite Typkonvertrierung im ODBC-Treiber aktivieren.
Create or replace view v_on_mysql_table_a as Select "spalte_a" as spalte_a ,"spalte_b" as spalte_b .... from mysqltable_a@myodbc;
Will man Daten aus einer großen MySQL-Datenbank mittels APEX in einer Oracle-Datenbank verfügbar machen, reicht als Oracle-Datennbank schon Oracle-XE.
Die Views kann man nun einzelnen Rollen und Usern verfügbar machen
Grant select on v_on_mysql_table_a to username|rolename;
Schreibe einen Kommentar
Du musst angemeldet sein, um einen Kommentar abzugeben.