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


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

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.oratnsnames.orainit<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!
Add your first comment to this post