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.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!