SQL ServerにOracleにリンクサーバーを設定する。
SQL ServerにORACLEへのリンクサーバ設定
- SQl ServerからOracleをリンク経由で処理を行う環境
- Oracle Provider for Oracleで登録しても何故か「インスタンス生成失敗」のエラーになった。
- SQL Server 64bitバージョンの場合、ODACだけでは「OraOLEDB.Oracle」の64bitドライバーがインストールされないみたい => 以下のサイトより、Oracle Clientをダウンロードし、インストールした。 http://www.oracle.com/technetwork/jp/database/enterprise-edition/downloads/112010-win64soft-088865-ja.html
ORACLE用リンクサーバーを作成する。
以下のスクリプトより、リンクサーバーを作成する。
USE [master] GO EXEC master.dbo.sp_addlinkedserver @server = N'ORA_LINK', -- リンクサーバー名 @srvproduct=N'Oracle', -- プロダクト名 特に意味はなさそう @provider='OraOLEDB.Oracle', -- 固定 @datasrc='ORCL' -- tnsnames.oraに設定したSIDを設定する。 GO EXEC master.dbo.sp_serveroption @server=N'ORA_LINK', @optname=N'collation compatible', @optvalue=N'false' GO EXEC master.dbo.sp_serveroption @server=N'ORA_LINK', @optname=N'data access', @optvalue=N'true' GO EXEC master.dbo.sp_serveroption @server=N'ORA_LINK', @optname=N'dist', @optvalue=N'false' GO EXEC master.dbo.sp_serveroption @server=N'ORA_LINK', @optname=N'pub', @optvalue=N'false' GO EXEC master.dbo.sp_serveroption @server=N'ORA_LINK', @optname=N'rpc', @optvalue=N'false' GO EXEC master.dbo.sp_serveroption @server=N'ORA_LINK', @optname=N'rpc out', @optvalue=N'false' GO EXEC master.dbo.sp_serveroption @server=N'ORA_LINK', @optname=N'sub', @optvalue=N'false' GO EXEC master.dbo.sp_serveroption @server=N'ORA_LINK', @optname=N'connect timeout', @optvalue=N'0' GO EXEC master.dbo.sp_serveroption @server=N'ORA_LINK', @optname=N'collation name', @optvalue=null GO EXEC master.dbo.sp_serveroption @server=N'ORA_LINK', @optname=N'lazy schema validation', @optvalue=N'false' GO EXEC master.dbo.sp_serveroption @server=N'ORA_LINK', @optname=N'query timeout', @optvalue=N'0' GO EXEC master.dbo.sp_serveroption @server=N'ORA_LINK', @optname=N'use remote collation', @optvalue=N'true' GO EXEC master.dbo.sp_serveroption @server=N'ORA_LINK', @optname=N'remote proc transaction promotion', @optvalue=N'true' GO USE [master] GO EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'ORA_LINK', @locallogin = NULL , @useself = N'False', @rmtuser = N'scott', -- ORACLEのログインユーザID @rmtpassword = N'tiger' -- ログインパスワード GO
接続確認処理
以下のSQLの結果として1が表示されれば成功
SELECT * FROM OPENQUERY(ORA_LINK,'SELECT 1 D FROM DUAL')
トラブルシューティング
サードパーティの Oracle プロバイダを使用していて、その Oracle プロバイダを SQL Server プロセス外部で実行できない場合、プロバイダ オプションを変更してインプロセスで実行できるようにします。 * ManagementStudioから「サーバーオブジェクト\リンクサーバー\プロバイダ」からOraOLEDB.Oracleをダブルクリックし、InProcess許可をチェックいれる。