SQLServerODBCドライバーをOracleのHeterogeneousServicesODBCエージェントであるDG4ODBCとともに使用して、Oracle21cをSQLServerに接続します。
- DG4ODBCのバージョンが32ビットか64ビットかを確認します:
file dg4odbc
file
の場合 コマンドの出力には、「ELF 64ビットLSB実行可能ファイル」などが含まれます。DG4ODBCは64ビットであり、SQLServerODBCドライバーの64ビットバージョンを使用する必要があります。それ以外の場合は、プラットフォーム用の32ビットSQLServerODBCドライバーをダウンロードします。
- DG4ODBCがインストールされているマシンにSQLServerODBCドライバーをインストールし、ライセンスを取得してテストします。
インストール手順については、SQLServerODBCドライバーのドキュメントを参照してください。設定する必要のある環境変数(
LD_LIBRARY_PATH
)については、ドキュメントを参照してください。 、LIBPATH
、LD_RUN_PATH
またはSHLIB_PATH
プラットフォームとリンカーによって異なります。 - DG4ODBC初期化ファイルを作成します。例:
cd $ORACLE_HOME/hs/admin cp initdg4odbc.ora initmssql.ora
- これらのパラメータと値が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
my_sql_server_odbc_dsnを置き換えます ターゲットSQLServerデータベースに接続するSQLServerODBCドライバーデータソースの名前。
-
$ORACLE_HOME/network/admin/listener.ora
にエントリを追加します これにより、DG4ODBCのSID_NAMEが作成されます。例: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) ) )
oracle_home_directoryを置き換えます
$ORACLE_HOME
の値を使用 。 - DG4ODBCエントリを
$ORACLE_HOME/network/admin/tnsnames.ora
に追加します これは、前の手順で作成したSID_NAMEを指定します。例:MSSQL= (DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)) (CONNECT_DATA= (SID=mssql)) (HS=OK) )
- Oracleリスナーを起動(または再起動)します:
cd $ORACLE_HOME/bin ./lsnrctl stop ./lsnrctl start
- SQL*PlusでOracleデータベースに接続します。
- SQL * Plusで、ターゲットSQLServerデータベースのデータベースリンクを作成します。例:
CREATE PUBLIC DATABASE LINK mssqllink CONNECT TO "dbuser" IDENTIFIED BY "dbpassword" using 'MSSQL';
dbuserを置き換えます およびdbpassword ターゲットSQLServerデータベースの有効なユーザー名とパスワードを使用します。
メモ
- Oracle21cバージョンのDG4ODBCは
SQLDriverConnect
を使用しなくなりました ODBCデータソースに接続します。SQLConnect
を使用します 代わりに、HS_NLS_NCHAR = UCS2
をサポートしていません 。同様に、DSNなしの接続はSQLConnect
では機能しません 。 - リンクされたテーブルにROWIDという名前の列が含まれている場合、クエリは次のエラーで失敗します:
ORA-02070: database SQLSRV2019 does not support ROWIDs in this context
これを回避するには、列の名前をROWIDからROWNUMに変更します。