Oracle Provider for OLE DBは、Oracleのインストールに含まれています。これには、この製品を使用して実際の問題を解決する方法を例示する機能およびデモが含まれています。 Show 表1-1 Oracle Provider for OLE DBファイル
2018.08.15 2009.01.07 SQL ServerでORACLEのリンクサーバー作成時や作成後”OpenQuery”でSELECT文を実行したときなどに発生したエラーとその対処方法を記述。 原因に気づくまでかなり時間がかかってしまったのと、使うプロバイダによってエラーもバラバラでとにかく悩まされたので覚書しておく。 前提条件この記事は、SQL Serverが動作しているPCにORACLEのクライアントソフトなり、「Instant Client」なりがセットアップ済みで、ORACLEと接続できる環境になっていることを前提として記述しています。 「Instant Client」のセットアップやセットアップ後の動作確認等については、関連する記事を参照してください。 ORACLE Instant ClientをインストールしてSQL*Plusで接続できるまでの手順を紹介 ORACLEの「Instant Client」インストール方法について覚書。 インストールしてODBC、SQL*Plusで接続できるまでのセットアップ手順を説明した記事です。 ORACLE Instant Clientインストール後の動作確認(SQL*Plus編) 今回は、前の記事でインストール、セットアップしたORACLE Instant Clientの動作確認としてSQL*Plusを使ってみます。 ORACLE Instant Clientインストール後の動作確認(ODBCドライバ接続編) 今回は、ORACLE Instant Clientインストール、セットアップ後の動作確認としてODBC接続を使ってみます。 ORACLE Instant ClientとSQL*Plusを使った動作確認手順は別の記事で書いてますのでそち... 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クライアントとネットワークコンポーネントが見つかりません。" プロバイダは、これらのコンポーネントがインストールされるまで機能しません。
発生エラー 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) 以上、一応確認できたエラーメッセージは、こんな感じです。 他にも出た気がしましたが、保存してなくて載せることができませんでした。 エラーが発生した環境についてこれらのエラーが出た環境は以下のとおりです。
何れもOracleへのアクセスが正常に動作することを確認できた環境で発生したエラーです。 エラーの原因についてエラーの原因は、結果的にはOracleのクライアントツール(ここでは、「Oracle Instant Client」)がセットアップされているフォルダに対してSQL Serverを実行しているアカウント(「SQL Server (SQLEXPRESS)」サービスのログオンアカウント)がアクセス権を持っていなかったため発生していたようです。 アクセス権を付与し、SQL Serverを再起動後リンクサーバーを作成しなおしたところエラーが発生しなくなりリンクサーバーの作成が正常に終了しました。 また、作成したリンクサーバーに対してOpenQueryを使用してリンクサーバーのテーブルに対してSELECT文を発行してもエラーも出ず正常に結果が出力されました。 エラー発生時の対処方法について対処方法は、原因にも記述したように、「SQL Serverを実行しているアカウントに対してOracleのクライアントツールがセットアップされているフォルダへのアクセス権を与える」ということになります。 SQL Serverを実行してるアカウントの確認方法は以下の通りです。(通常は、「NT AUTHORITY\NetworkService」です。)
[ログオン]タブの[アカウント]テキストボックスに表示されているアカウントがSQL Serverを実行しているアカウントになります。 実行アカウントが確認できたら、あとはそのアカウントにOracleのクライアントツールがセットアップされているフォルダへのアクセス権を付与すればよいのですが、その前にSQL Serverを実行しているマシンのローカルユーザーグループ"Administrators"にSQL Serverの実行アカウントを追加してエラーが回避できるか簡単に確認してみてください。 ローカルユーザーグループ"Administrators"に実行アカウントを追加後、SQL Serverを再起動し、めんどくさくてもリンクサーバーを作り直した上で回避できるかどうか確認してください。 回避できるかできないか確認後、"Administrators"から実行アカウントは削除してください。 そして回避できた場合は、実行アカウントにOracleのクライアントツールがセットアップされているフォルダへのアクセス権を付与してください。 付与後はSQL Serverの再起動を忘れずに。 私がリンクサーバー作成時に悩まされた数々のエラーは、この対処方法で解決できましたが、これでも解決できない場合は、残念ながらわかりません。 リンクサーバー作成時に発生するエラーについて他に解決策やわかったことがあったらコメントを頂けると幸いです。 リンクサーバーを使用することが少ないせいなのかググったり、関連のフォーラムを検索しても役立ちそうな情報を見つけることはできませんでした。 ちなみにMicrosoftの資料にリンクサーバー作成時の障害に関するトラブルシュートについて記述された資料がありますので、参考までにリンクを貼っておきます。 Oracle データベースへのリンク サーバーのセットアップとトラブルシューティング - SQL Server この記事では、Microsoft SQL Serverを実行しているコンピューターから Oracle データベースにリンク サーバーを設定する方法について説明し、Oracle データベースにリンク サーバーを設定するときに発生する可能性がある一般的なエラーの基本的なトラブルシューティング手順について説明します。 |