Oracle
 sql >> Database >  >> RDS >> Oracle

Collegamento di Oracle 21c a SQL Server

Utilizzare il driver ODBC di SQL Server con l'agente ODBC dei servizi eterogenei di Oracle, DG4ODBC, per connettere Oracle 21c a SQL Server.

  1. Verifica se la tua versione di DG4ODBC è a 32 o 64 bit:
    file dg4odbc

    Se il file l'output del comando contiene "Eseguibile LSB a 64 bit ELF" o qualcosa di simile, DG4ODBC è a 64 bit ed è necessario utilizzare una versione a 64 bit del driver ODBC di SQL Server.

    Altrimenti, scarica il driver ODBC di SQL Server a 32 bit per la tua piattaforma.

  2. Installa, concede in licenza e verifica il driver ODBC di SQL Server sulla macchina in cui è installato DG4ODBC.

    Per le istruzioni di installazione, vedere la documentazione del driver ODBC di SQL Server. Fare riferimento alla documentazione per vedere quali variabili di ambiente è necessario impostare (LD_LIBRARY_PATH , LIBPATH , LD_RUN_PATH o SHLIB_PATH a seconda della piattaforma e del linker).

  3. Crea un file di inizializzazione DG4ODBC. Ad esempio:
    cd $ORACLE_HOME/hs/admin
    cp initdg4odbc.ora initmssql.ora
  4. Assicurati che questi parametri e valori siano presenti nel tuo file 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 
    

    Sostituisci my_sql_server_odbc_dsn con il nome di un'origine dati del driver ODBC di SQL Server che si connette al database di destinazione di SQL Server.

  5. Aggiungi una voce a $ORACLE_HOME/network/admin/listener.ora che crea un SID_NAME per DG4ODBC. Ad esempio:
    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)
       )
     )
    

    Sostituisci directory_home_oracle con il valore di $ORACLE_HOME .

  6. Aggiungi una voce DG4ODBC a $ORACLE_HOME/network/admin/tnsnames.ora che specifica il SID_NAME creato nel passaggio precedente. Ad esempio:
    MSSQL=
     (DESCRIPTION=
       (ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))
       (CONNECT_DATA= (SID=mssql))
       (HS=OK)
     )
  7. Avvia (o riavvia) Oracle Listener:
    cd $ORACLE_HOME/bin
    ./lsnrctl stop
    ./lsnrctl start
  8. Connettiti al tuo database Oracle in SQL*Plus.
  9. In SQL*Plus, creare un collegamento al database per il database di destinazione di SQL Server. Ad esempio:
    CREATE PUBLIC DATABASE LINK mssqllink CONNECT TO
    "dbuser" IDENTIFIED BY "dbpassword" using 'MSSQL';

    Sostituisci dbuser e dbpassword con un nome utente e una password validi per il database SQL Server di destinazione.

Note
  • La versione Oracle 21c di DG4ODBC non utilizza più SQLDriverConnect per connettersi a un'origine dati ODBC. Utilizza SQLConnect invece, che non supporta HS_NLS_NCHAR = UCS2 . Allo stesso modo, le connessioni senza DSN non funzionano con SQLConnect .
  • Se la tabella collegata contiene una colonna denominata ROWID, la query avrà esito negativo con l'errore:
    ORA-02070: database SQLSRV2019 does not support ROWIDs in this context

    Per aggirare il problema, cambia il nome della colonna da ROWID a ROWNUM.