SQL Serverでは、リンクサーバーを使用して、完全に異なるサーバーにある2つのテーブルを結合するビューを作成できます。サーバーの1つをSQL ServerからOracleに変更しても、同じようにできますか?
結合テーブルがOracleである必要があります
はい、できます。 Oracleでは、これは "Heterogeneous Connectivity"と呼ばれます このOracle管理マニュアル に詳細があります。基本的な概要は
この記事 は、上記の手順を詳細に実行するケースの例を紹介しています。
OracleデータベースからSQL Serverに接続できるようにデータベースリンクを作成する方法を次に示します。
私の既存の環境:
Select * from v$parameter where name = 'global_names'
を実行して、値がfalse
であることを確認しました。ディレクトリ%Oracle_HOME%\ hs\admin \にinit ?????。oraというファイルを作成しました。ここで?????手順1で作成したシステムDSNの名前です。このファイルには次の行が含まれています。
HS_FDS_CONNECT_INFO=<System DSN name>
HS_FDS_TRACE_LEVEL=off
%Oracle_HOME%\ NETWORK\ADMIN \にある私のlistener.oraファイルを編集しました。 (SID_LIST_LISTENER =(SID_LIST = ...内にネストされた一連のSID_DESCアイテムが既にありましたODBCシステムDSN:
(SID_DESC =
(PROGRAM = dg4odbc)
(Oracle_HOME = <Oracle_HOMEへのパス>)
(SID_NAME = <システムDSN名>)
)
Tnsnames.oraファイルにエントリを作成しました(listener.oraと同じディレクトリにあります)。
<この接続に付ける名前>>
(説明=
(ADDRESS =
(PROTOCOL = TCP)
(Host = localhost)
(PORT = 1521)
)
(CONNECT_DATA =(SID = <システムDSN名>))
(HS = OK)
)
SQL * PlusまたはSQL Developerで、データベースリンクを作成しました。これは、ターゲットSQLサーバーに接続するために必要な資格情報を入力した場所です。
CREATE PUBLIC DATABASE LINK <Name of DB Link> CONNECT TO "user" IDENTIFIED BY "password" USING '<Name we gave the connection in tnsnames.ora>';
管理者特権のコマンドプロンプトを開き、lsnrctl stop
を実行してからlsnrctl start
を実行してOracleリスナーサービスを再起動しました(ユーザーが切断されている可能性がありますか?)
SQL Developerを開き、現在リンクされているSQL Serverデータベースに対してクエリを実行してテストしました(アクセスに使用されたアカウントのアクセスによって制限されます)。
SELECT * FROM SomeTable@<Name we gave link in Step 5>;
適切なOracleのドキュメントはここにあります: https://docs.Oracle.com/database/121/OTGIS/configodbc.htm#OTGIS11