Bonjour,
Un intervenant dans le forum Oracle me suggère de poser mon problème également ici.
D'un côté, j'ai un serveur OpenSuse avec MariaDB : mysql Ver 15.1 Distrib 10.6.8-MariaDB, for Linux (x86-64) using EditLine Wrapper". MariaDB contient une BDD nommée "pef" et une vue dans cette BDD nommée "v_carte_mut".
De l'autre côté, j'ai un serveur Oracle Linux 8.5 avec Oracle Database 19.3.0 contenant une base de données CDB "cocktail19" et PDB "cktl".
Je souhaite interroger la vue MariaDB depuis la BDD Oracle.
J'ai vu un paquet de tutos sur le sujet et j'ai même fait un article de blog sur ma réalisation précédente avec Oracle 12 qui n'était pas en architecture CDB/PDB mais en bases de données séparées.
Avec le nouveau serveur, j'arrive à interroger MariaDB via ODBC à l'aide de l'utilitaire isql sans problème :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| isql ODBCPEF
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> SELECT COUNT(*) FROM v_carte_mut;
+---------------------+
| COUNT(*) |
+---------------------+
| 179 |
+---------------------+
SQLRowCount returns 1
1 rows fetched
SQL> |
Mais l'interrogation via la BDD Oracle plante. 
Voici la config sur le serveur Oracle...
/etc/odbcinst.ini :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| [PostgreSQL]
Description=ODBC for PostgreSQL
Driver=/usr/lib/psqlodbcw.so
Setup=/usr/lib/libodbcpsqlS.so
Driver64=/usr/lib64/psqlodbcw.so
Setup64=/usr/lib64/libodbcpsqlS.so
FileUsage=1
[MySQL]
Description=ODBC for MySQL
Driver=/usr/lib/libmyodbc5.so
Setup=/usr/lib/libodbcmyS.so
Driver64=/usr/lib64/libmyodbc5.so
Setup64=/usr/lib64/libodbcmyS.so
FileUsage=1
[FreeTDS]
Description=Free Sybase & MS SQL Driver
Driver=/usr/lib/libtdsodbc.so
Setup=/usr/lib/libtdsS.so
Driver64=/usr/lib64/libtdsodbc.so
Setup64=/usr/lib64/libtdsS.so
Port=1433
[MariaDB]
Description=ODBC for MariaDB
Driver=/usr/lib/libmaodbc.so
Driver64=/usr/lib64/libmaodbc.so
FileUsage=1
[MariaDB ODBC 3.1 Driver]
Description=MariaDB Connector/ODBC v.3.1
Driver=/usr/lib64/libmaodbc.so
UsageCount=1 |
=> La section [MariaDB] a été créée par défaut lors de l'installation de unixODBC. J'ai créé la section [MariaDB ODBC 3.1 Driver] lors de l'installation du mariadb-connector-odbc-3.1.17-rhel8-amd64.tar.gz récupéré sur le site de MariaDB.
/etc/odbc.ini :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| [ODBC Data Sources]
ODBCPEF=mariadb pef schema data source
[ODBCPEF]
Driver=MariaDB ODBC 3.1 Driver
#Driver=/usr/lib64/libmaodbc.so
Description=ODBC for MariaDB query by Oracle for Carte MUT
SERVER=<ip du serveur MariaDB>
PORT=3306
#USER=cartemut
USER=pef
PASSWORD=<mot de passe du user MariaDB>
CHARSET=utf8mb4
OPTION=0
DATABASE=pef
TRACE=Yes
TraceFile=/tmp/traceODBCPEF.log
Logging=Yes
LogFile=/tmp/odbc.log
DriverManagerEncoding = UTF-8
SOCKET= |
$ORACLE_HOME/network/admin/listener.ora :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =monserveuroracle.ensfea.fr)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(ORACLE_HOME = /produits/oracle/product/19.3.0/db_1)
(SID_NAME = form)
)
(SID_DESC =
(ORACLE_HOME = /produits/oracle/product/19.3.0/db_1)
(SID_NAME = cktl)
)
(SID_DESC =
(ORACLE_HOME = /produits/oracle/product/19.3.0/db_1)
(SID_NAME = preej)
)
(SID_DESC =
(ORACLE_HOME = /produits/oracle/product/19.3.0/db_1)
(PROGRAM = /produits/oracle/product/19.3.0/db_1/bin/dg4odbc)
(ENV = LD_LIBRARY_PATH=/usr/lib64:/usr/lib64/mariadb/plugin:/produits/oracle/product/19.3.0/db_1/lib:/usr/lib)
(SID_NAME = HSPEF)
)
(SID_DESC =
(ORACLE_HOME = /produits/oracle/product/19.3.0/db_1)
(SID_NAME = neptune)
)
)
USE_SID_AS_SERVICE_LISTENER=ON
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF
ADR_BASE_LISTENER = /produits/oracle |
$ORACLE_HOME/network/admin/tnsnames.ora :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| CKTL
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = monserveuroracle.ensfea.fr)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = cktl)
)
)
FORM =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = monserveuroracle.ensfea.fr)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = form)
)
)
PREEJ =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = monserveuroracle.ensfea.fr)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = preej)
)
)
NEPTUNE =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = monserveuroracle.ensfea.fr)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = neptune)
)
)
# Pour copie de prod vers test
PROD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = monserveuroracleprod.ensfea.fr)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = cocktail)
)
)
# Pour import des étudiants de pef vers enfa.etudiant_pef
HSPEF =
(DESCRIPTION =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = monserveuroracle.ensfea.fr)
(PORT = 1521)
)
(CONNECT_DATA =
(SID = HSPEF)
)
(HS = OK)
) |
$ORACLE_HOME/hs/admin/initHSPEF.ora :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| # HS init parameters
#
#HS_FDS_CONNECT_INFO="MariaDB ODBC 3.1 Driver"
HS_FDS_CONNECT_INFO=ODBCPEF
HS_FDS_TRACE_LEVEL=DEBUG
HS_FDS_SHAREABLE_NAME=/usr/lib64/libodbc.so
# HS_NLS_NCHAR=UCS32
HS_LANGUAGE=FRENCH_FRANCE.UTF8
HS_FDS_SUPPORT_STATISTICS=FALSE
#
# ODBC specific environment variables
#
set ODBCINI=/etc/odbc.ini
set ODBCINSTINI=/etc/odbcinst.ini
set LD_LIBRARY_PATH=/usr/lib64
#
# Environment variables required for the non-Oracle system
#
#set <envvar>=<value>
set HOME=/home/oracle
set MapToWVarchar=False
set MaximumColumnSize=4000
set IncludeDualTable=True |
Création du DATABASE LINK :
CREATE PUBLIC DATABASE LINK DBLPEF CONNECT TO "pef" IDENTIFIED BY "<mot de passe de l'utilisateur MariaDB" USING 'HSPEF';
Requête d'interrogation de la vue à partir d'Oracle :
SELECT COUNT(*) FROM "v_carte_mut"@DBLPEF;
Résultat :
ORA-28500: la connexion d'ORACLE à un système non Oracle a renvoyé ce message :
[unixODBC][Driver Manager]Data source name {I}
ORA-02063: précédant 2 lines de DBLPEF
28500. 00000 - "connection from ORACLE to a non-Oracle system returned this message:"
*Cause: The cause is explained in the forwarded message.
*Action: See the non-Oracle system's documentation of the forwarded
message.
Erreur à la ligne 1, colonne 36
D'après mes recherches sur Internet, il semblerait que la suite du message soit que le Driver Manager unixODBC ne trouve pas la source ODBCPEF... alors que ça fonctionne très bien avec isql ! 
Si quelqu'un a réussi à interroger MariaDB depuis Oracle19, je suis preneur de son expérience !
Partager