Table of Contents
- 1 Ziel
- 2 Vorausetzungen
- 3 Installation Oracle Database Gateway 11g Release 2
- 4 Installation MySQL ODBC Connector
- 5 Vorbereitung MySQL Datenbank
- 6 Anlegen eines ODBC DSN (Data Source Name) für die MySQL Datenbank
- 7 Konfiguration des dg4odbc Gateways
- 8 Listener Konfiguration anpassen
- 9 Verbindung von der Oracle Datenbank zur MySQL Datenbank herstellen
- 10 Überprüfung
Ziel
In diesem Blogeintrag wird gezeigt wie Sie mithilfe des Oracle Database Gatesways 11g Release 2 eine Verbindung zwischen einer Oracle und einer MySQL Datenbank mithilfe eines Datenbank Links herstellen können.
Vorausetzungen
Um die hier gezeigten Schritte durchführen zu können müssen die folgenden Voraussetzungen erfüllt sein:
- Funktionstüchtige Oracle Datenbank (z.B. Oracle Database 11g Release 2)
- Funktionstüchtige MySQL Datenbank (z.B. MySQL 5.5)
In meiner Testumgebung setze ich die folgenden Datenbank Versionen ein.
Oracle (Hostname: oradb)
SQL> select * from v$version;
BANNER
---------------------------------------------------------------------
Personal Oracle Database 11g Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE 11.2.0.2.0 Production
TNS for 64-bit Windows: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production
MySQL (Hostname: mysql)
mysql> select @@version Version;
+---------+
| Version |
+---------+
| 5.5.13 |
+---------+
Installation Oracle Database Gateway 11g Release 2
Ich habe das Oracle Database Gateway als Standalone Installation auf einem seperaten Server installiert. Für weitere Informationen siehe den Oracle Database Gateway for ODBC User’s Guide.
Die Software selbst kann entweder über das Oracle Technology Network oder über E-Delivery bezogen werden.
Auf die Installation gehe in an dieser Stelle zum jetzigen Zeitpunkt nicht ein und verweise auf die Oracle Dokumentation.
Installation MySQL ODBC Connector
Für den Zugriff auf die MySQL Datenbank muss auf dem Server mit dem Oracle Database Gateway der MySQL ODBC Connector installiert werden. Dieser kann hier heruntergeladen werden.
Ich zeige die Installation des Connectors anhand des 64-bit RPM Paketes (Dateiname: mysql-connector-odbc-5.1.10-1.x86_64.rpm).
$> rpm -ivh mysql-connector-odbc-5.1.10-1.x86_64.rpm
Nach der Installation findet sich die Library für den ODBC Treiber im Verzeichnis /usr/lib64.
Vorbereitung MySQL Datenbank
Für die Demonstration des Datenbank Links wird eine Testdatenbank inklusive dedizierten Benutzer angelegt.
$> mysql -u root -p
MYSQL> CREATE DATABASE test;
MYSQL> GRANT ALL PRIVILEGES ON test.* ON 'rmt'@'%' IDENTIFIED BY 'rmt';
MYSQL> USE test;
MYSQL> CREATE TABLE t1 (id int, name text);
MYSQL> INSERT INTO t1 VALUES (1, 'Oracle');
MYSQL> INSERT INTO t1 VALUES (2, 'MySQL');
MYSQL> COMMIT;
Hinweis: Aus Sicherheitsgründen sollte in Produktivumgebungen der Platzhalter % nicht verwendet werden. Stattdessen sollte an dieser Stelle die IP-Adresse des Servers mit dem Oracle Database Gateway angegeben werden.
Anlegen eines ODBC DSN (Data Source Name) für die MySQL Datenbank
Der ODBC DSN muss auf dem Server auf dem das Oracle Database Gateway installiert wurde angelegt werden.
$> vi ~/.mysql-odbc.ini
[ODBC Data Sources]
test= MySQL ODBC Driver 5.1
[test]
Driver = /usr/lib64/libmyodbc5.so
DATABASE = test
DESCRIPTION = MySQL Verbindung zur TEST Datenbank
PORT = 3306
SERVER = 192.168.200.211
UID = rmt
PWD = rmt
CHARSET = latin1
TRACEFILE = /tmp/mysql-odbc-test.trc
TRACE = OFF
Hinweis: Der Name und Pfad für die Datei kann an dieser Stelle frei gewählt werden.
Konfiguration des dg4odbc Gateways
Die Einstellungen für das Gateway werden in einer init<SID>.ora Datei, ähnlich wie das Parameterfile einer Datenbank, gespeichert. Die Konfigurationsdatei muss im Verzeichnis $ORACLE_HOME/hs/admin abgelegt werden.
[oracle@gateway ~]$ vi $ORACLE_HOME/hs/admin/inittest.ora
# # HS init parameters #
# HINWEIS: Name des DSN muss hier angegeben werden
HS_FDS_CONNECT_INFO=test
HS_FDS_TRACE_LEVEL=0
HS_FDS_SHAREABLE_NAME=/usr/lib64/libmyodbc5.so
HS_LANGUAGE=GERMAN_GERMANY.WE8ISO8859P15
# # ODBC specific environment variables #
# HINWEIS: Pfad und Name muss ggf. angepasst werden.
set ODBCINI=/home/oracle/.mysql-odbc.ini
# # Environment variables required for the non-Oracle system #
set HOME=/u01/app/oracle/product/11.2.0/tg_1
Hinweis: Als Grundlage für die Datei kann die Beispieldatei initdg4odbc.ora verwendet werden.
Listener Konfiguration anpassen
Im nächsten Schritt muss der Listener auf dem Oracle Database Gateway angepasst werden.
$> vi $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/tg_1)
(SID_NAME = test)
(PROGRAM = dg4odbc)
)
)
Hinweis: Als SID_NAME muss der Wert aus dem vorherigen Schritt (in diesem Fall test) verwendet werden.
Verbindung von der Oracle Datenbank zur MySQL Datenbank herstellen
Für den Datenbank Link wird ein TNS Alias benötigt. Dieser wird nun zu der tnsnames.ora auf dem Oracle Datenbankserver hinzugefügt.
$> vi $ORACLE_HOME/network/admin/tnsnames.ora
TEST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.208)(PORT = 1521))
(CONNECT_DATA =
(SID = test)
)
(HS = OK)
)
Anschließend kann der Datenbank Link angelegt werden.
$> sqlplus / as sysdba
SQL> CREATE DATABASE LINK testlink CONNECT TO "rmt" IDENTIFIED BY "rmt"
USING 'test';
Zum Anmelden an der MySQL Datenbank wird der dafür angelegt Benutzer rmt verwendet. Als Wert für den USING Parameter wird der zuvor hinzugefügte TNS Name verwendet.
Überprüfung
Zum Abschluss wird der Datenbank Link überprüft. Beim Abrufen von Informationen aus der MySQL Datenbank muss darauf geachtet werden, dass Spalten und Tabellenname in Anführungszeichen stehen. Dies liegt an der unterschiedlichen Case Policy der beiden Systeme.
SQL> SELECT * FROM "t1"@testlink
id name
---------- -----------------
1 Oracle
2 MySQL
Das Abrufen der Daten war erfolgreich. Der Datenbank Link zwischen der MySQL und der Oracle Datenbank wurde erfolgreich konfiguriert.
Guten Tag und vielen Dank für diese Anleitung. Mich würde interessieren, ob darüber auch umgekehrt ein Zugriff von MySQL auf Oracle möglich ist?
Vielen Dank
Hallo Manuel,
leider funktioniert das über diesem Wege nicht in die andere Richtung. Soweit ich weiß, unterstützt MySQL auch keine direkte Verbindung zu anderen Datenbanken.
Viele Grüße
Christian