Utilisez le pilote ODBC SQL Server avec l'agent ODBC des services hétérogènes d'Oracle, DG4ODBC, pour connecter Oracle 21c à SQL Server.
- Vérifiez si votre version de DG4ODBC est 32 bits ou 64 bits :
file dg4odbc
Si le
file
la sortie de la commande contient "ELF 64-bit LSB executable", ou quelque chose de similaire, DG4ODBC est 64-bit, et vous devez utiliser une version 64-bit du pilote ODBC SQL Server.Sinon, téléchargez le pilote ODBC SQL Server 32 bits pour votre plate-forme.
- Installez, autorisez et testez le pilote ODBC SQL Server sur la machine sur laquelle DG4ODBC est installé.
Pour obtenir des instructions d'installation, consultez la documentation du pilote ODBC SQL Server. Reportez-vous à la documentation pour voir quelles variables d'environnement vous devez définir (
LD_LIBRARY_PATH
,LIBPATH
,LD_RUN_PATH
ouSHLIB_PATH
selon la plate-forme et l'éditeur de liens). - Créez un fichier d'initialisation DG4ODBC. Par exemple :
cd $ORACLE_HOME/hs/admin cp initdg4odbc.ora initmssql.ora
- Assurez-vous que ces paramètres et valeurs sont présents dans votre fichier init :
HS_FDS_CONNECT_INFO = my_sql_server_odbc_dsn HS_FDS_SHAREABLE_NAME = /usr/local/easysoft/unixODBC/lib/libodbc.so HS_LANGUAGE = AMERICAN_AMERICA.WE8ISO8859P1
Remplacez my_sql_server_odbc_dsn avec le nom d'une source de données de pilote ODBC SQL Server qui se connecte à la base de données SQL Server cible.
- Ajouter une entrée à
$ORACLE_HOME/network/admin/listener.ora
qui crée un SID_NAME pour DG4ODBC. Par exemple :SID_LIST_LISTENER = (SID_LIST = (SID_DESC= (SID_NAME=mssql) (ORACLE_HOME=oracle_home_directory) (PROGRAM=dg4odbc) (ENVS=LD_LIBRARY_PATH = /usr/local/easysoft/unixODBC/lib: /usr/local/easysoft/lib) ) )
Remplacez oracle_home_directory avec la valeur de
$ORACLE_HOME
. - Ajouter une entrée DG4ODBC à
$ORACLE_HOME/network/admin/tnsnames.ora
qui spécifie le SID_NAME créé à l'étape précédente. Par exemple :MSSQL= (DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)) (CONNECT_DATA= (SID=mssql)) (HS=OK) )
- Démarrez (ou redémarrez) l'écouteur Oracle :
cd $ORACLE_HOME/bin ./lsnrctl stop ./lsnrctl start
- Connectez-vous à votre base de données Oracle dans SQL*Plus.
- Dans SQL*Plus, créez un lien de base de données pour la base de données SQL Server cible. Par exemple :
CREATE PUBLIC DATABASE LINK mssqllink CONNECT TO "dbuser" IDENTIFIED BY "dbpassword" using 'MSSQL';
Remplacez dbuser et dbpassword avec un nom d'utilisateur et un mot de passe valides pour la base de données SQL Server cible.
Remarques
- La version Oracle 21c de DG4ODBC n'utilise plus
SQLDriverConnect
pour se connecter à une source de données ODBC. Il utiliseSQLConnect
à la place, qui ne prend pas en chargeHS_NLS_NCHAR = UCS2
. De même, les connexions sans DSN ne fonctionnent pas avecSQLConnect
. - Si votre table liée contient une colonne nommée ROWID, votre requête échouera avec l'erreur :
ORA-02070: database SQLSRV2019 does not support ROWIDs in this context
Pour contourner ce problème, modifiez le nom de la colonne de ROWID à ROWNUM.