Oracle Datenbank Link nach MySQL einrichten

Dieser Blog beschreibt, wie man einen Datenbank Link von einer Oracle Datenbank zu einer MySQL Datenbank aufbaut. Als Beispiel dient eine Oracle Standard Edition Two Version 19c (19.14.0) Datenbank mit der Standard Edition High Availability (SEHA) Konfiguration auf Oracle Linux 8.

Installation der Packages

Für die Installation werden zwei RPM-Packages benötigt:

  • yum install unixODBC
  • Download mysql-connector-odbc-8.0.28-1.el8.x86_64.rpm
  • rpm -ihv mysql-connector-odbc-8.0.28-1.el8.x86_64.rpm

Das Paket unixODBC installiert die Basislibraries, darunter /usr/lib64/libodbc.so, den wir später noch brauchen und die Dateien /etc/odbc.ini sowie /etc/odbcinst.ini. Außerdem gehört das Tool /usr/bin/isql zu diesem Paket.

Das Paket mysql-connector-odbc installiert dann die spezifischen mysql Libraries. Außerdem wird die Datei /etc/odbcinst.ini angepasst.

ODBC Konfiguration

Im nächsten Schritt wird der ODBC Client konfiguriert. Dafür wird in der /etc/odbc.ini die Konfiguration für einen oder mehrere Verbindungen eingetragen.

Beispiel:

[TESTMYDB]
Description     = Test-MYSQL-Datenbank
Driver          = /usr/lib64/libmyodbc8w.so
Trace           = no
Server          = 192.168.168.168
Port            = 3306
Database        = daten
User            = TESTUSER
Password        = passwort

Wichtig ist der Name des Eintrags (TESTMYDB) und der korrekte Treiber. libmyodbc8w.so ist der Treiber für eine Unicode MySQL Datenbank. Ansonsten gibt es noch libmyodbc8a.so für eine MySQL Datenbank mit 1-Byte Zeichensatz.

Damit sollte es möglich sein, sich von dem Server aus auf die MySQL Datenbank zu verbinden.

isql TESTMYDB TESTUSER passwort

Gateway Installation

Als nächstes wird die Oracle Gateway Software installiert. Leider ist es hier immer noch erforderlich die Software zunächst auszupacken und dann zu installieren:

cd /u05/share/software
unzip LINUX.X64:193000_gateways.zip
cd gateways
./runInstaller
image
Gateway Software Installationsverzeichnis
image 1
Auswahl des Gateways

Im Beispiel wird noch das Gateway für MS-SQL installiert, das spielt für diese Konfiguration keine Rolle.

image 2
Zusammenfassung

Damit ist das Gateway im Verzeichnis /u01/app/oracle/product/19c/gwhome_1 installiert.

Gateway Konfiguration

Für die Konfiguration sind drei Komponenten verantwortlich:

  • listener.ora
  • tnsnames.ora
  • init<GATEWAYNAME>.ora

listener.ora

LISTENER=
   (DESCRIPTION=
      (ADDRESS_LIST=
         (ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))
         (ADDRESS=(PROTOCOL=TCP)(HOST=seha01)(PORT=1521))
      )
   )

SID_LIST_LISTENER =
   (SID_LIST=
      (SID_DESC=
         (SID_NAME=TESTMYDB)
         (ORACLE_HOME=/u01/app/oracle/product/19/gwhome_1)
         (PROGRAM=dg4odbc)
      )
   )

Der SID_NAME muss dem Namen in der Datei /etc/odbc.ini entsprechen.
Natürlich kann es weitere SIDs für Datenbanken oder weitere ODBC Verbindungen geben.
Auf dem zweiten SEHA Server muss natürlich der Parameter „HOST“ angepasst werden.

tnsnames.ora

TESTMYDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = seha01)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = seha02)(PORT = 1521))
    (CONNECT_DATA =
      (SID = TESTMYDB)
    )
    (HS = OK)
  )

Bei RAC oder SEHA Datenbanken kann hier nicht die Scan-Adresse verwendet werden. Statt dessen müssen die beteiligten HOSTS explizit angegeben werden.

Der TNS-Alias darf natürlich einen anderen Namen haben als die SID, die wieder identisch mit dem Eintrag in /etc/odbc.ini sein muss.

initTESTWEBDB.ora

HS_FDS_CONNECT_INFO = TESTWEBDB
#HS_FDS_TRACE_LEVEL = OFF
#HS_LANGUAGE = AMERICAN_AMERICA.WE8ISO8859P15
HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so

Der Name der Datei muss dem Namen des odbc.ini Eintrags entsprechen.
Wichtig ist, dass es sich bei dem Parameter HS_FDS_SHAREABLE_NAME nicht um die ODBC-Library von MySQL handelt sondern um den so genannten „ODBC Drive Manager“ und dass ist in diesem Fall das libodbc.so aus dem unixODBC Package.

Datenbank-Link

Nach den ganzen Vorarbeiten kann jetzt der Datenbank-Link erstellt werden. Das ist wieder „Schema-F“:

CREATE DATABASE LINK jostest
CONNECT TO "TESTUSER" IDENTIFIED BY "password"
USING 'TESTMYWEBDB";

Damit sollte die Verbindung zur MySQL Datenbank klappen.
Falls folgender Fehler auftritt:

ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
[

Das liegt wahrscheinlich daran, dass die MySQL Datenbank keine Unicode Datenbank ist. Am einfachsten ist es, in der Datei initTESTMYDB.ora folgenden Parameter zu setzen:

HS_LANGUAGE = AMERICAN_AMERICA.WE8ISO8859P15

Beim Zugriff auf die MySQL Datenbanken bitte beachten, dass dort Tabellen und Datenbanken in der Regel klein geschrieben werden. Also besser die Datenbank und Tabellennamen in doppelte Hochkommata setzen.

SELECT * FROM "daten"."test"@jostest;

Das war’s.

Falls noch etwas fehlt oder sich Fehler eingeschlichen haben, dann bitte eine kurze Nachricht an mich oder als Blog Kommenta.

Viel Erfolg!

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen