Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Verbinden von Oracle 21c mit SQL Server

Verwenden Sie den SQL Server-ODBC-Treiber mit dem ODBC-Agenten für heterogene Dienste von Oracle, DG4ODBC, um Oracle 21c mit SQL Server zu verbinden.

  1. Überprüfen Sie, ob Ihre Version von DG4ODBC 32-Bit oder 64-Bit ist:
    file dg4odbc

    Wenn die file Die Ausgabe des Befehls enthält „ELF 64-Bit LSB Executable“ oder etwas Ähnliches, DG4ODBC ist 64-Bit und Sie müssen eine 64-Bit-Version des SQL Server-ODBC-Treibers verwenden.

    Andernfalls laden Sie den 32-Bit-SQL-Server-ODBC-Treiber für Ihre Plattform herunter.

  2. Installieren, lizenzieren und testen Sie den SQL Server ODBC-Treiber auf dem Rechner, auf dem DG4ODBC installiert ist.

    Installationsanweisungen finden Sie in der Dokumentation zum SQL Server-ODBC-Treiber. Sehen Sie in der Dokumentation nach, welche Umgebungsvariablen Sie festlegen müssen (LD_LIBRARY_PATH , LIBPATH , LD_RUN_PATH oder SHLIB_PATH je nach Plattform und Linker).

  3. Erstellen Sie eine DG4ODBC-Init-Datei. Beispiel:
    cd $ORACLE_HOME/hs/admin
    cp initdg4odbc.ora initmssql.ora
  4. Stellen Sie sicher, dass diese Parameter und Werte in Ihrer Init-Datei vorhanden sind:
    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 
    

    Ersetzen Sie my_sql_server_odbc_dsn mit dem Namen einer SQL Server-ODBC-Treiberdatenquelle, die eine Verbindung zur SQL Server-Zieldatenbank herstellt.

  5. Fügen Sie einen Eintrag zu $ORACLE_HOME/network/admin/listener.ora hinzu die einen SID_NAME für DG4ODBC erstellt. Beispiel:
    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)
       )
     )
    

    Ersetzen Sie oracle_home_directory mit dem Wert von $ORACLE_HOME .

  6. Fügen Sie einen DG4ODBC-Eintrag zu $ORACLE_HOME/network/admin/tnsnames.ora hinzu die den im vorherigen Schritt erstellten SID_NAME angibt. Beispiel:
    MSSQL=
     (DESCRIPTION=
       (ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))
       (CONNECT_DATA= (SID=mssql))
       (HS=OK)
     )
  7. Starten (oder starten) Sie den Oracle Listener:
    cd $ORACLE_HOME/bin
    ./lsnrctl stop
    ./lsnrctl start
  8. Verbinden Sie sich mit Ihrer Oracle-Datenbank in SQL*Plus.
  9. Erstellen Sie in SQL*Plus einen Datenbanklink für die SQL Server-Zieldatenbank. Beispiel:
    CREATE PUBLIC DATABASE LINK mssqllink CONNECT TO
    "dbuser" IDENTIFIED BY "dbpassword" using 'MSSQL';

    Ersetzen Sie dbuser und dbpasswort mit einem gültigen Benutzernamen und Kennwort für die SQL Server-Zieldatenbank.

Notizen
  • Die Oracle 21c-Version von DG4ODBC verwendet SQLDriverConnect nicht mehr um eine Verbindung zu einer ODBC-Datenquelle herzustellen. Es verwendet SQLConnect stattdessen, was HS_NLS_NCHAR = UCS2 nicht unterstützt . Ebenso funktionieren DSN-lose Verbindungen nicht mit SQLConnect .
  • Wenn Ihre verknüpfte Tabelle eine Spalte namens ROWID enthält, schlägt Ihre Abfrage mit folgendem Fehler fehl:
    ORA-02070: database SQLSRV2019 does not support ROWIDs in this context

    Um dies zu umgehen, ändern Sie den Namen der Spalte von ROWID in ROWNUM.