Utilizzare il driver ODBC di SQL Server con l'agente ODBC dei servizi eterogenei di Oracle, DG4ODBC, per connettere Oracle 21c a SQL Server.
- 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.
- 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
oSHLIB_PATH
a seconda della piattaforma e del linker). - Crea un file di inizializzazione DG4ODBC. Ad esempio:
cd $ORACLE_HOME/hs/admin cp initdg4odbc.ora initmssql.ora
- 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.
- 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
. - 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) )
- Avvia (o riavvia) Oracle Listener:
cd $ORACLE_HOME/bin ./lsnrctl stop ./lsnrctl start
- Connettiti al tuo database Oracle in SQL*Plus.
- 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. UtilizzaSQLConnect
invece, che non supportaHS_NLS_NCHAR = UCS2
. Allo stesso modo, le connessioni senza DSN non funzionano conSQLConnect
. - 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.