リンクサーバー oracle provider for ole db

Oracle Provider for OLE DBは、Oracleのインストールに含まれています。これには、この製品を使用して実際の問題を解決する方法を例示する機能およびデモが含まれています。

表1-1 Oracle Provider for OLE DBファイル

ファイル説明場所

OraOLEDBver.dll

Oracle Provider for OLE DB

ORACLE_BASE\ORACLE_HOME\bin

OraOLEDBrfcver.dll

Oracle行セット・ファイル・キャッシュ・マネージャ

ORACLE_BASE\ORACLE_HOME\bin

OraOLEDBrmcver.dll

Oracle行セット・メモリー・キャッシュ・マネージャ

ORACLE_BASE\ORACLE_HOME\bin

OraOLEDBrstver.dll

Oracle行セット

ORACLE_BASE\ORACLE_HOME\bin

OraOLEDBgmrver.dll

Oracle ODBC SQLパーサー

ORACLE_BASE\ORACLE_HOME\bin

OraOLEDBlangver.dll

(langは必要な言語)

言語固有のリソースDLL

ORACLE_BASE\ORACLE_HOME\bin

OraOLEDBpusver.dll

プロパティの説明

ORACLE_BASE\ORACLE_HOME\bin

OraOLEDButlver.dll

OraOLEDBユーティリティDLL

ORACLE_BASE\ORACLE_HOME\bin

OraOLEDBver.tlb

OraOLEDBタイプ・ライブラリ

ORACLE_BASE\ORACLE_HOME\bin

OraOLEDB.h

OraOLEDBヘッダー・ファイル

ORACLE_BASE\ORACLE_HOME\oledb\include

OraOLEDBver.lib

OraOLEDBライブラリ・ファイル

ORACLE_BASE\ORACLE_HOME\oledb\lib

OraOLEDBlang.msb

(langは必要な言語)

言語固有のメッセージ・ファイル

ORACLE_BASE\ORACLE_HOME\oledb\mesg

Readme

リリース・ノート

ORACLE_BASE\ORACLE_HOME\oledb

リンクサーバー oracle provider for ole db
SQL Server

2018.08.15 2009.01.07

リンクサーバー oracle provider for ole db

SQL ServerでORACLEのリンクサーバー作成時や作成後”OpenQuery”でSELECT文を実行したときなどに発生したエラーとその対処方法を記述。

原因に気づくまでかなり時間がかかってしまったのと、使うプロバイダによってエラーもバラバラでとにかく悩まされたので覚書しておく。

前提条件

この記事は、SQL Serverが動作しているPCにORACLEのクライアントソフトなり、「Instant Client」なりがセットアップ済みで、ORACLEと接続できる環境になっていることを前提として記述しています。

「Instant Client」のセットアップやセットアップ後の動作確認等については、関連する記事を参照してください。

リンクサーバー oracle provider for ole db

ORACLE Instant ClientをインストールしてSQL*Plusで接続できるまでの手順を紹介

ORACLEの「Instant Client」インストール方法について覚書。 インストールしてODBC、SQL*Plusで接続できるまでのセットアップ手順を説明した記事です。

リンクサーバー oracle provider for ole db

ORACLE Instant Clientインストール後の動作確認(SQL*Plus編)

今回は、前の記事でインストール、セットアップしたORACLE Instant Clientの動作確認としてSQL*Plusを使ってみます。

リンクサーバー oracle provider for ole db

ORACLE Instant Clientインストール後の動作確認(ODBCドライバ接続編)

今回は、ORACLE Instant Clientインストール、セットアップ後の動作確認としてODBC接続を使ってみます。 ORACLE Instant ClientとSQL*Plusを使った動作確認手順は別の記事で書いてますのでそち...

リンクサーバー oracle provider for ole db

ORACLE:「ODBCドライバのセットアッププログラムを読み込むことができません(システムエラーコード126)」の原因と対処方法

あまりアプリケーションがセットアップされていないようなクリーンな環境にORACLEのInstant ClientをセットアップしてODBCのデータソースを作ろうとすると、ドライバの選択画面で以下のようなエラーメッセージが表示されるときが...

発生したエラーメッセージ

以下発生したエラーメッセージを記載する。

以下に記述するエラーメッセージは、リンクサーバーを作成時、また作成時にはエラーが発生しなかったにもかかわらず、OpenQueryを使用して作成したリンクサーバー上のテーブルをSELECTした際などに発生したエラーメッセージです。

どの時にエラーが発生したかや正確なエラーメッセージについてはうろ覚えなため単純にこんなメッセージだったなーという感じで列挙しています。(いい加減でごめんなさい)

従って、似たようなエラーメッセージやここに記述されていないエラーメッセージであってもリンクサーバー作成時やOpenQuery実行時に何かしらのエラーが出る場合は対処方法を試してみてください。

発生エラー No.1

リンク サーバー "XXX" の OLE DB プロバイダ "MSDASQL" から、メッセージ "[Microsoft][ODBC Driver Manager] 接続文字列の属性が無効です。" が返されました。

発生エラー No.2

リンク サーバー "XXX" の OLE DB プロバイダ "MSDASQL" のデータ ソース オブジェクトを初期化できません。

発生エラー No.3

"アクセスが拒否されました"

発生エラー No.4

リンクサーバー"XXX"のOLE DBプロバイダ"MSDAORA"のデータソースオブジェクトを初期化できません。 "Oracleクライアントとネットワークコンポーネントが見つかりません。"

プロバイダは、これらのコンポーネントがインストールされるまで機能しません。

プロバイダー名"MSDORA"は、使うプロバイダーによって変わります。 例えば、OraOLEDB.Oracleを使っている場合は、"MSDAORA"の部分が"OraOLEDB.Oracle"に変わります。

発生エラー No.5

リンク サーバー "oracle" の OLE DB プロバイダ "MSDAORA" から、メッセージ "Error while trying to retrieve text for error ORA-12154 " が返されました。

メッセージ 7303、レベル 16、状態 1、行 1

リンク サーバー "oracle" の OLE DB プロバイダ "MSDAORA" のデータ ソース オブジェクトを初期化できません。

発生エラー No.6

メッセージ 7399、レベル 16、状態 1、行 1 リンク サーバー "ora" の OLE DB プロバイダ "OraOLEDB.Oracle" により、エラーがレポートされました。

プロバイダが予期しない重大なエラーをレポートしました。

メッセージ 7330、レベル 16、状態 2、行 1 リンク サーバー "ora" の OLE DB プロバイダ "OraOLEDB.Oracle" から行をフェッチできません。

発生エラー No.7

"OraOLEDBpus10.dll: 指定されたモジュールが見つかりません。"

発生エラー No.8

リンクサーバー"ORACLE"のOLE DBプロバイダ"OraOLEDB.Oracle"のインスタンスを作成できません。(Microsoft SQL Server、エラー:7302)

以上、一応確認できたエラーメッセージは、こんな感じです。 他にも出た気がしましたが、保存してなくて載せることができませんでした。

エラーが発生した環境について

これらのエラーが出た環境は以下のとおりです。

  • SQL Server Expressが動作しているマシンに「Oracle Instant Client」をセットアップ
  • ODBCドライバ、SQL*Plusでの動作確認、動作テストでは正常
  • フリーのデータベースアクセスツール「黒猫 SQL Studio」でSELECT実行による正常動作

何れもOracleへのアクセスが正常に動作することを確認できた環境で発生したエラーです。

エラーの原因について

エラーの原因は、結果的にはOracleのクライアントツール(ここでは、「Oracle Instant Client」)がセットアップされているフォルダに対してSQL Serverを実行しているアカウント(「SQL Server (SQLEXPRESS)」サービスのログオンアカウント)がアクセス権を持っていなかったため発生していたようです。

アクセス権を付与し、SQL Serverを再起動後リンクサーバーを作成しなおしたところエラーが発生しなくなりリンクサーバーの作成が正常に終了しました。

また、作成したリンクサーバーに対してOpenQueryを使用してリンクサーバーのテーブルに対してSELECT文を発行してもエラーも出ず正常に結果が出力されました。

エラー発生時の対処方法について

対処方法は、原因にも記述したように、「SQL Serverを実行しているアカウントに対してOracleのクライアントツールがセットアップされているフォルダへのアクセス権を与える」ということになります。

SQL Serverを実行してるアカウントの確認方法は以下の通りです。(通常は、「NT AUTHORITY\NetworkService」です。)

  1. [マイコンピュータ]を右クリックし、[管理]をクリックする。
  2. [コンピュータの管理]画面が表示されるので、[サービスとアプリケーション]の1つ下の階層にある[サービス]をクリックする。
  3. [コンピュータの管理]画面右側のサービスの一覧から[SQL Server (SQLEXPRESS)]を見つけてダブルクリックする。
  4. [(ローカルコンピュータ)SQL Server(SQLEXPRESS)のプロパティ]ダイアログボックスが表示されるので、[ログオン]タブをクリックする。

[ログオン]タブの[アカウント]テキストボックスに表示されているアカウントがSQL Serverを実行しているアカウントになります。

実行アカウントが確認できたら、あとはそのアカウントにOracleのクライアントツールがセットアップされているフォルダへのアクセス権を付与すればよいのですが、その前にSQL Serverを実行しているマシンのローカルユーザーグループ"Administrators"にSQL Serverの実行アカウントを追加してエラーが回避できるか簡単に確認してみてください。

ローカルユーザーグループ"Administrators"に実行アカウントを追加後、SQL Serverを再起動し、めんどくさくてもリンクサーバーを作り直した上で回避できるかどうか確認してください。

回避できるかできないか確認後、"Administrators"から実行アカウントは削除してください。

そして回避できた場合は、実行アカウントにOracleのクライアントツールがセットアップされているフォルダへのアクセス権を付与してください。

付与後はSQL Serverの再起動を忘れずに。

私がリンクサーバー作成時に悩まされた数々のエラーは、この対処方法で解決できましたが、これでも解決できない場合は、残念ながらわかりません。

リンクサーバー作成時に発生するエラーについて他に解決策やわかったことがあったらコメントを頂けると幸いです。

リンクサーバーを使用することが少ないせいなのかググったり、関連のフォーラムを検索しても役立ちそうな情報を見つけることはできませんでした。

ちなみにMicrosoftの資料にリンクサーバー作成時の障害に関するトラブルシュートについて記述された資料がありますので、参考までにリンクを貼っておきます。

リンクサーバー oracle provider for ole db

Oracle データベースへのリンク サーバーのセットアップとトラブルシューティング - SQL Server

この記事では、Microsoft SQL Serverを実行しているコンピューターから Oracle データベースにリンク サーバーを設定する方法について説明し、Oracle データベースにリンク サーバーを設定するときに発生する可能性がある一般的なエラーの基本的なトラブルシューティング手順について説明します。