SQL Server から Oracle データベースへ「OraOLEDB.Oracle」でリンクサーバー接続しようとしたところ以下のエラーで失敗しました。
==================================================================
この要求のデータを取得できませんでした。(Microsoft.SqlServer.Management.Sdk.Sfc)
追加情報:
Transact-SQL ステートメントまたはバッチの実行中に例外が発生しました。(Microsoft.SqlServer.ConnectionInfo)
リンクサーバー"<リンクサーバー名>" の OLE DB プロバイダー "OraOLEDB.Oracle" により、エラーがレポートされました。アクセスが拒否されました。
リンクサーバー"<リンクサーバー名>" の OLE DB プロバイダー "OraOLEDB.Oracle" から必要なインターフェイス("IID_IDBSchemaRowset") を取得できません。(Microsoft SQL Server 、エラー:7399)
==================================================================

クリックで拡大
調べてみたところ、SQL Server のデータベースを実行するサービスアカウントに権限がないことが原因のようです。
対応方法として以下の方法が見つかりました。
・Oracle Client のインストールディレクトリにアクセス権がない
→ディレクトリにアクセス権を設定する
・sqlnet.oraの「SQLNET.AUTHENTICATION_SERVICES= (NTS)」の (NTS) を (NONE) にする
しかし、上記の方法を試してみましたが改善できず・・・
今回はデータ移行の為に一時的に Oracle サーバーと接続したいだけだったこともあり、SQL Server のサービスを実行するアカウントを Administrator にすることで対応しました。
できるだけ最小限の権限付与で実現できたいので特定のディレクトリに個別のアクセス権付与のみで済ませたいところですが・・・
【設定方法】
- スタートメニューから「SQL Server 構成マネージャー」を起動します。
クリックで拡大
- SQL Server のサービスを右クリックして「プロパティ」をクリックします。
クリックで拡大
- 「ログオン」タブで「このアカウント」を選択し、アカウント名、パスワードを設定して「適用」をクリックします。
クリックで拡大
- サービスを再起動する確認メッセージが表示されますので「はい」をクリックします。
クリックで拡大
- SQL Server サービスが再起動され、元の画面が表示されます。
「ログオン」の列が指定したアカウントになっていることを確認します。
クリックで拡大
「NETWORK SERVICE」を「Administrators」グループに追加することでも対応できました。(確認済み)
これこそ「一時的であること」が前提ですが。