リンクされたサーバーをリモートのOracleデータベースにセットアップすることができました。これは、最終的には複数のステップからなるプロセスになりました。
- SQLServerにOracleODBCドライバーをインストールします。
- SQLServer上のOracleデータベースへのシステムDSNを作成します。
- システムDSNを使用してSQLサーバー上にリンクサーバーを作成します。
ステップ1:サーバーにOracleODBCドライバーをインストールする
a。必要なOracleInstantClientパッケージをダウンロードします:Basic、ODBC、およびSQL * Plus(オプション)
b。パッケージをSQLサーバーのローカルディレクトリ(通常はC:\Oracle
)に解凍します。 。これにより、C:\Oracle\instantclient_10_2
のような[ディレクトリ]が作成されます。 、これは、この回答の残りの部分で参照される[ディレクトリ]の値になります。
c。 tnsnames.ora
という名前のテキストファイルを作成します 以下を含むインスタントクライアント[ディレクトリ]内:
OracleTnsName =
(
DESCRIPTION=
(
ADDRESS = (PROTOCOL=TCP)(HOST=10.1.3.42)(PORT=1521)
)
(
CONNECT_DATA = (SERVICE_NAME=acc)
)
)
注:実際のHOST
、PORT
、およびSERVICE_NAME
接続を確立するOracleサーバーによって異なります。この情報は、多くの場合、リスナーの下にあるOracleネットワーククライアントツールを使用して見つけることができます。 。
OracleTnsName
Oracleデータソースに割り当てる任意の名前を指定でき、システムDSNを設定するときに使用されます。必要に応じて、上記の構文を使用して、同じtnsnames.oraファイルに複数のTNS名を定義することもできます。
d。 [ディレクトリ]をシステムに追加しますPATH
環境変数。
e。 TNS_Admin
という名前の新しいシステム環境変数を作成します [ディレクトリ]
f。 [directory]\odbc_install.exe
を実行します OracleODBCドライバをインストールするためのユーティリティ。
g。 SQLサーバーを再起動することをお勧めしますが、必須ではない場合があります。また、SQLサーバーとSQLエージェントのユーザーIDについて、このディレクトリにセキュリティ権限を付与することもできます。
ステップ2:OracleODBCドライバーを使用するシステムDNSを作成する
a。 ODBCデータソースアドミニストレータを開きます 道具。 [管理ツール->データソース(ODBC)]
b。 [システムDSN]タブを選択してから、[追加]ボタンを選択します。
c。ドライバリストで、Instantclient{バージョン}のOracleを選択します。 。 (例:「インスタントクライアント10_2のOracle」)次に、「完了」ボタンを選択します。
d。次のように指定します:
Data Source Name
:{システムDSN名}Description
:{空白/空のまま}TNS Service Name
:OracleTnsName
が必要ですtnsnames.ora
で定義しました リストされているファイルを値として選択します。- ユーザーID :{Oracleユーザー名}
e。 [接続のテスト]ボタンを選択します。 {Oracleユーザーパスワード}を入力するように求められます。すべてがうまくいけば、テストは成功します。
ステップ3:SQLでOracleデータベースにリンクされたサーバーを作成する
SQL Serverでクエリウィンドウを開き、次を実行します。
EXEC sp_addlinkedserver
@server = '{Linked Server Name}'
,@srvproduct = '{System DSN Name}'
,@provider = 'MSDASQL'
,@datasrc = '{System DSN Name}'
EXEC sp_addlinkedsrvlogin
@rmtsrvname = '{Linked Server Name}'
,@useself = 'False'
,@locallogin = NULL
,@rmtuser = '{Oracle User Name}'
,@rmtpassword = '{Oracle User Password}'
注:{Linked Server Name}
Oracleサーバーを参照するときに使用したいものなら何でもかまいませんが、{System DNS Name}
必須 以前に作成したシステムDSNの名前と一致します。
{Oracle User Name}
システムDSNで使用されるユーザーID、および{Oracle User Password}
と同じである必要があります。 ODBC接続を正常にテストするために使用したものと同じである必要があります。 Oracleリンクサーバーの問題のトラブルシューティングについては、KB280106を参照してください。
Oracleリンクサーバーへのクエリ
OPENQUERYを使用してOracleリンクサーバーでパススルークエリを実行できますが、非常に大きなレコードセットの場合、ORA-01652
を受け取る可能性があることに注意してください。 ORDER BY
を指定した場合のエラーメッセージ パススルークエリの句。 ORDER BY
の移動 パススルークエリから外部のselectステートメントへの句は、この問題を解決しました。