Oracle und MySQL vereinigen, – HS Service und Datenbanklink

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.

  1. Welche Geräte sind die Datenbank A aufgeführt, die in Datenbank B nicht enthalten sind.
  2. Eine Clientseitige Lösung hat den Vorteil, dass sich die Server nicht gegenseitig „sehen“ müssen
  3. 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.
Methoden der Datenbank-Kopplung 2

Methoden der Datenbank-Kopplung

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.

CREATE public DATABASE LINK
DbLinkName
CONNECT TO USERNAME IDENTIFIED BY PASSWORT
USING ‘DB_Name’;
Danach kann auf Tabellen in der Form
select * from tabellenName@DbLinkName;
zugegriffen werden
–TNS-Names – Beispiel

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

Will man nun einen Datenbanklink von einer Oracle auf eine MySQL-Datenbank realisiseren, muss man die HS-Services der Oracle-Datenbank nutzen, die aus der MySQL dann eine Oracle-Instanz machen,  .. natürlich nur virtuell.
  • 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

HS-Service, von Oracle zu MySQL

 

Installationsschritte

  1. Zugriff auf die MySQL-Datenbank ermöglichen mittels
    Grant select on …. ,und anschließend flush privileges…
  2. MySQL-ODBC-Treiber unter Windows installieren, auf dem die Oracle-DB läuft. In der Systemsteuerung
    • ODBC Data Source Administrator
    • System DSN -> Ad
  3. 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
  4. 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)
    )
  5. 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!
  6. DB-Link unter Oracle einrichten
    –create database link myodbc connect to “mysqlusername” identified by “mysqluserpassword” using ‘myodbc’;
  7. 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;

 

 

Hinterlasse eine Antwort