ハロの外部記憶インターフェイス

そろそろ覚える努力が必要かも…

SQL ServerにOracleにリンクサーバーを設定する。

SQL ServerORACLEへのリンクサーバ設定

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許可をチェックいれる。

参考: https://support.microsoft.com/ja-jp/help/280106/how-to-set-up-and-troubleshoot-a-linked-server-to-an-oracle-database-i