Oracle
 sql >> Base de données >  >> RDS >> Oracle

Connexion d'Oracle 21c à SQL Server

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.

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

  2. 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 ou SHLIB_PATH selon la plate-forme et l'éditeur de liens).

  3. Créez un fichier d'initialisation DG4ODBC. Par exemple :
    cd $ORACLE_HOME/hs/admin
    cp initdg4odbc.ora initmssql.ora
  4. 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.

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

  6. 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)
     )
  7. Démarrez (ou redémarrez) l'écouteur Oracle :
    cd $ORACLE_HOME/bin
    ./lsnrctl stop
    ./lsnrctl start
  8. Connectez-vous à votre base de données Oracle dans SQL*Plus.
  9. 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 utilise SQLConnect à la place, qui ne prend pas en charge HS_NLS_NCHAR = UCS2 . De même, les connexions sans DSN ne fonctionnent pas avec SQLConnect .
  • 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.