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

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

元の製品バージョン:  Microsoft SQL Server 2005 Standard Edition Microsoft SQL Server Developer Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server Express Edition, Microsoft SQL Server 2005 ワークグループ エディション
元の KB 番号:   280106

概要

この記事では、Microsoft SQL Server を実行しているコンピューターから Oracle データベースにリンク サーバーをセットアップする方法について説明し、リンク サーバーを Oracle にセットアップするときに発生する可能性がある一般的なエラーの基本的なトラブルシューティング手順について説明します。 この記事のほとんどの情報は、Microsoft OLEDB Provider for Oracle (MSDAORA) を使用するように構成されている環境に適用されます。 新しい開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションの変更を計画します。 代わりに、Oracle の OLE DB プロバイダーを使用します。

Oracle の OLEDB プロバイダーを使用してリンク サーバーを構成する方法の詳細については、「Oracle とリンク サーバーを起動して実行する方法」 を参照してください

重要

Microsoft ODBC Driver for Oracle の現在のバージョンは ODBC 2.5 仕様に準拠し、OLE DB Provider for Oracle はネイティブの Oracle 7 OCI API プロバイダーです。 ドライバーとプロバイダーの両方が、SQL*Net クライアント (または Oracle 8x 用の Net8 クライアント) と Oracle 呼び出しインターフェイス (OCI) ライブラリ、および他の Oracle クライアント コンポーネントを使用して、Oracle データベースに接続し、データを取得します。 Oracle クライアント コンポーネントは重要であり、ドライバーとプロバイダーの両方を使用して Oracle データベースに正常に接続するように正しく構成する必要があります。

Microsoft Data Access Components (MDAC) バージョン 2.5 以降のバージョンでは、Microsoft ODBC ドライバーと OLE DB プロバイダーの両方が Oracle 7 と Oracle 8i のみをサポートし、次の制限があります。

  • CLOB、BLOB、BFILE、NCHAR、NCLOB、NVARCHAR2 などの Oracle 8.x 固有のデータ型はサポートされていません。

  • Oracle 7.x および 8.x サーバーに対する Unicode 機能はサポートされていません。

  • 複数の Oracle クライアント インスタンス、または複数の Oracle ホームは、SYSTEM PATH 変数内の Oracle ホームの最初の出現に依存するためにサポートされていません。

  • ADO または OLEDB を使用して、ストアド プロシージャまたはバッチ SQLステートメントから複数の結果セットを返す操作はサポートされていません。

  • 入れ子になった外部結合はサポートされていません。

  • XML の永続化はサポートされていません。

  • 8i より大きいバージョンは、これらのドライバーを使用してサポートされていません。

注意

この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示または黙示にかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。

リンク サーバーを Oracle にセットアップする手順

  1. リンク サーバーがセットアップされている場所で実行されているコンピューターに oracle クライアント SQL Serverインストールする必要があります。

  2. 必要なドライバーを、コンピューターで実行しているコンピューターにインストールSQL Server。 Microsoft では、Oracle Microsoft OLE DB Provider for Oracleおよび Microsoft ODBC Driver のみをサポートしています。 サード パーティプロバイダーまたはサード パーティドライバーを使用して Oracle に接続する場合は、プロバイダーまたはドライバーを使用して発生する可能性のある問題について、それぞれのベンダーに問い合う必要があります。

  3. Oracle 用の Microsoft OLE DB Provider for Oracle Microsoft ODBC ドライバーを使用する場合は、次の点を考慮してください。

    • MICROSOFT Data Access Components (MDAC) に含まれる OLE DB プロバイダーと ODBC ドライバーの両方に、SQL*Net 2.3.x 以降のバージョンが必要です。 クライアント コンピューターに Oracle 7.3.x クライアント ソフトウェアまたは以降のバージョンをインストールする必要があります。 クライアント コンピューターは、クライアント コンピューターを実行しているSQL Server。

    • MDAC 2.5 以降のバージョンが、コンピューター上にインストールされていることを確認SQL Server。 MDAC 2.1 以前のバージョンでは、Oracle 8 を使用するデータベースに接続できません。 x 以降のバージョン。

    • MDAC 2.5 以降のバージョンを有効にするには、Oracle クライアント ソフトウェアを使用するには、次の表に示す SQL Server を実行しているクライアント コンピューターでレジストリを変更する必要があります。

      Oracle
      Client               Microsoft Windows 2000 and later versions
      --------------------------------------------------------------------------
      
      7.x                  [HKEY_LOCAL_MACHINE\SOFTWARE
                           Microsoft\MSDTC\MTxOCI]
                           "OracleXaLib"="xa73.dll"
                           "OracleSqlLib"="SQLLib18.dll"
                           "OracleOciLib"="ociw32.dll"
      
      8.0                  [HKEY_LOCAL_MACHINE\SOFTWARE
                           \Microsoft\MSDTC\MTxOCI]
                           "OracleXaLib"="xa80.dll"
                           "OracleSqlLib"="sqllib80.dll"
                           "OracleOciLib"="oci.dll"
      
      8.1                  [HKEY_LOCAL_MACHINE\SOFTWARE
                           \Microsoft\MSDTC\MTxOCI]
                           "OracleXaLib"="oraclient8.dll"
                           "OracleSqlLib"="orasql8.dll"
                           "OracleOciLib"="oci.dll"
      
  4. Oracle クライアント ソフトウェアをインストールしたSQL Serverコンピューターを再起動します。

  5. 次のスクリプトを使用して、SQL Serverを実行しているコンピューターで、リンク サーバーをセットアップします。

    -- Adding linked server (from SQL Server Books Online):
    /* sp_addlinkedserver [@server =] 'server'[, [@srvproduct =] 'product_name']
     [, [@provider =] 'provider_name']
     [, [@datasrc =] 'data_source']
     [, [@location =] 'location'] [, [@provstr =] 'provider_string'] 
     [, [@catalog =] 'catalog']
    */
    
    EXEC sp_addlinkedserver 'Ora817Link', 'Oracle', 'MSDAORA', 'oracle817'
    
    -- Adding linked server login:
    /* sp_addlinkedsrvlogin [@rmtsrvname =] 'rmtsrvname'[,[@useself =] 'useself']
     [,[@locallogin =] 'locallogin']
     [,[@rmtuser =] 'rmtuser']
     [,[@rmtpassword =] 'rmtpassword']
    */
    
    EXEC sp_addlinkedsrvlogin 'Ora817Link', 'FALSE',NULL, 'scott', 'tiger'
    
    -- Help on the linked server:
    EXEC sp_linkedservers
    EXEC sp_helpserver
    select * from sysservers
    

    注意

    Microsoft ODBC Driver for Oracle を使用する場合は、パラメーターを使用 @datasrc して DSN 名を指定できます。 DSN レス接続の場合、プロバイダー文字列はパラメーターを介して指定 @provstr されます。 このMicrosoft OLE DB Provider for Oracle、パラメーターに TNSNames.Ora ファイルで構成されている Oracle サーバー エイリアスを使用 @datasrc します。 詳細については、「オンライン ブックス オンライン」の「sp_addlinkedserver」トピックSQL Server参照してください。

一般的なエラー メッセージとトラブルシューティング方法

重要

このセクション、方法、またはタスクには、レジストリの編集方法が記載されています。 レジストリを誤って変更すると、深刻な問題が発生することがあります。 レジストリを変更する際には十分に注意してください。 保護を強化するため、レジストリを変更する前にレジストリをバックアップします。 こうしておけば、問題が発生した場合にレジストリを復元できます。 レジストリをバックアップおよび復元する方法の詳細については、次の記事番号をクリックして、Microsoft サポート技術情報: 322756 Windows でレジストリをバックアップおよび復元する方法の記事を表示します。

次の 2 つの方法のいずれかを使用して、分散クエリを実行するときに発生するエラーに関する拡張情報を取得できます。

  • 方法 1

    ConnectをSQL ServerしSQL Server Management Studioコードを実行してトレース フラグ 7300 を有効にしてください。

    DBCC Traceon(7300)
    
  • 方法 2

    Profiler の "Errors and Warnings" イベント カテゴリにある "OLEDB エラー" イベントをキャプチャSQLします。 エラー メッセージの形式は次のとおりです。

    Interface::Method が 16 進数エラー コードで失敗しました。

    MDAC ソフトウェア開発キット (SDK)に含まれている Oledberr.h ファイルで 16 進数エラー コードを検索できます。

次に、発生する可能性のある一般的なエラー メッセージの一覧と、エラー メッセージのトラブルシューティング方法に関する情報を示します。

注意

2005 以降SQL Serverを使用している場合、これらのエラー メッセージは若干異なる場合があります。 ただし、これらのエラー メッセージのエラー ID は、以前のバージョンのエラー メッセージと同SQL Server。 したがって、エラーの ID で識別できます。 パフォーマンス関連の問題については、「分散クエリの最適化SQL Serverオンラインブック 」を検索 してください。

  • メッセージ 1

    エラー 7399: リンク サーバー "%ls" の OLE DB プロバイダー "%ls" でエラーが報告されました。 %ls

    トレース フラグ 7300 を有効にするか、SQLプロファイルを使用して OLEDB Errors イベントをキャプチャして、拡張 OLEDB エラー情報を取得します。

  • メッセージ 2a

    "ORA-12154: TNS:サービス名を解決できない"

  • メッセージ 2b

    "Oracle(tm) クライアントコンポーネントとネットワーク コンポーネントが見つかりませんでした。 これらのコンポーネントは Oracle Corporation によって提供され、Oracle バージョン 7.3.3 (またはより大きい) クライアント ソフトウェア インストールの一部です。

    これらのエラーは、Oracle サーバーへの接続に問題がある場合に発生します。 追加 のトラブルシューティングについては、以下の「Oracle サーバーへの接続に関する問題のトラブルシューティング方法」セクションを参照してください。

  • メッセージ 3

    エラー 7302: リンク サーバー "%ls" の OLE DB プロバイダー 'MSDAORA' のインスタンスを作成できません。

    ファイルが正しくMSDAORA.dll確認します。 (このMSDAORA.dllは、Oracle ファイルの Microsoft OLE DB プロバイダーです。このRegSvr32.exeを使用して登録Microsoft OLE DB Provider for Oracle。

    注意

    サードパーティの Oracle プロバイダーを使用し、Oracle プロバイダーが SQL Server プロセスの外部で実行できない場合は、プロバイダー オプションを変更してインプロセスを実行できます。 プロバイダー のオプションを変更するには、次のいずれかの方法を使用します。

    • 方法 1 次のレジストリ キーを探します。 次に、AllowInProcess (DWORD) エントリの値を 1 に変更します。 このレジストリ キーは、対応するプロバイダー名の下に存在します HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\ProviderName

    • 方法 2 新しいリンク サーバーを追加するときに、SQL Server Enterprise マネージャーを使用して [インプロセスの許可] オプションを直接設定します。 [プロバイダー オプション] をクリックし、[インプロセスの許可] チェック ボックスをオンにします。

  • メッセージ 4

    エラー 7303: リンク サーバー "%ls" の OLE DB プロバイダー 'MSDAORA' のデータ ソース オブジェクトを初期化できません。 [OLE/DB プロバイダーが返すメッセージ: ORA-01017: 無効なユーザー名/パスワード;ログオンが拒否されました]OLE DB エラー トレース [OLE/DB プロバイダー 'MSDAORA' IDBInitialize::Initialize returned 0x80040e4d]。

    このエラー メッセージは、リンク されたサーバーに正しいログイン マッピングが存在しない場合に表示されます。 ストアド プロシージャを実行 sp_helplinkedsrvlogin して、ログイン情報を正しく設定できます。 また、リンク サーバー構成に適切なパラメーターを指定していることを確認します。

  • メッセージ 5

    エラー 7306: リンク サーバー "%ls" の OLE DB プロバイダー 'MSDAORA' からテーブル '%ls' を開くことができません。 指定したテーブルが存在しません。 [OLE/DB プロバイダーが返すメッセージ: テーブルが存在しません。[OLE/DB プロバイダーが返すメッセージ: ORA-00942: テーブルまたはビューが存在しません]OLE DB エラー トレース [OLE/DB プロバイダー 'MSDAORA' IOpenRowset::OpenRowset が返0x80040e37: 指定されたテーブルが存在しません。]

    エラー 7312: リンク サーバー "%ls" の OLE DB プロバイダー '%ls' のスキーマまたはカタログの使用が無効です。 4 部構成の名前が指定されましたが、カタログやスキーマを使用するために必要なインターフェイスはプロバイダーによって公開されません。

    エラー 7313: リンク サーバー "%ls" のプロバイダー "%ls" に無効なスキーマまたはカタログが指定されました。

    エラー 7314: リンク サーバー "%ls" の OLE DB プロバイダー "%ls" には、"%ls" というテーブルが含されません。 テーブルが存在しないか、現在のユーザーがテーブルに対するアクセス許可を持っていません。

    これらのエラー メッセージが表示された場合、Oracle スキーマでテーブルが見つからないか、そのテーブルに対するアクセス許可が付与されていない可能性があります。 大文字を使用してスキーマ名が入力されたのを確認します。 テーブルと列のアルファベットの大文字と小文字は、Oracle システム テーブルで指定した通りである必要があります。

    Oracle 側では、二重引用符なしで作成されたテーブルまたは列が大文字で格納されます。 テーブルまたは列が二重引用符で囲まれている場合、テーブルまたは列は現在の形式で格納されます。

    次の呼び出しは、テーブルが Oracle スキーマに存在するかどうかを示しています。 この呼び出しには、正確なテーブル名も表示されます。

    sp_tables_ex @table_server=Ora817Link, @table_schema='your_schema_name'
    
  • メッセージ 6

    エラー 7413: リンク サーバー '%ls' (OLE DB Provider '%ls') に接続できません。 現在のユーザーに対して委任を有効にするかSQL Serverリモート ユーザー ログインを使用します。 Msg 18456、 Level 14, State 1, Line 1 Login failed for user ' ' .

    このエラー メッセージは、明示的なログイン マッピングを使用せずに、Microsoft サーバーに対してWindowsクエリが試行されている場合を示します。 セキュリティ委任がサポートされていないオペレーティング システム環境では、認証されたログインWindows NTを使用して作成されたリモート ログインとパスワードへの明示的なマッピングが必要です sp_addlinkedsrvlogin

  • メッセージ 7

    エラー 7391: リンク サーバー "%ls" の OLE DB プロバイダー 'MSDAORA' が分散トランザクションを開始できなかったため、操作を実行できませんでした。 OLE DB エラー トレース [OLE/DB プロバイダー 'MSDAORA' ITransactionJoin::JoinTransaction が返0x8004d01b]

    この記事で説明したように、OCI バージョンが正しく登録されていることを確認します。

    注意

    レジストリ エントリが正しい場合は、MtxOCI.dllが読み込まれます。 このファイルMtxOCI.dll読み込まれない場合は、Oracle に対して分散トランザクションを実行するには、Microsoft OLE DB Provider for Oracle Microsoft ODBC Driver for Oracle を使用します。 サード パーティプロバイダーを使用している場合にエラー 7391 が表示される場合は、使用している OLE DB プロバイダーが分散トランザクションをサポートしています。 OLE DB プロバイダーが分散トランザクションをサポートしている場合は、Microsoft 分散トランザクション コーディネーター (MSDTC) が実行され、ネットワーク アクセスが有効 になっているか確認します

  • メッセージ 8

    エラー 7392: リンク サーバー "%ls" の OLE DB プロバイダー 'MSDAORA' のトランザクションを開始できません。 OLE DB エラー トレース [OLE/DB プロバイダー 'MSDAORA' ITransactionLocal::StartTransaction が返0x8004d013 ISOLEVEL=4096]。

    このセッションでアクティブにできるトランザクションは 1 つだけなので、OLE DB プロバイダーはエラー 7392 を返しました。 このエラーは、接続が明示的または暗黙的なトランザクションで、OLE DB プロバイダーが入れ子になったトランザクションをサポートしていない場合に、OLE DB プロバイダーに対してデータ変更ステートメントが試行されている状態を示します。 SQL Server、特定のエラー状態では、トランザクションを続行しながらデータ変更ステートメントの影響を終了できるよう、このサポートが必要です。

    ON の場合はSQL Server OLE DB プロバイダーからの入れ子になったトランザクション SET XACT_ABORT のサポートは不要です。 したがって、暗黙的または明示的なトランザクションでリモート テーブルに対してデータ変更ステートメントを実行 SET XACT_ABORT ON する前に実行します。 使用している OLE DB プロバイダーが入れ子になったトランザクションをサポートしていない場合は、この操作を行います。

Oracle サーバーへの接続の問題をトラブルシューティングする手法

Oracle 用の Microsoft ODBC ドライバーまたは Oracle ドライバーを使用して Oracle 接続の問題をデバッグするには、次Microsoft OLE DB Provider for Oracle手順を実行します。

  1. Oracle SQL Plus ユーティリティ (コマンド ライン ベースのクエリ ユーティリティ) を使用して、Oracle に接続してデータを取得できると確認します。

    注意

    Oracle に接続してデータを取得できない場合は、Oracle クライアント コンポーネントのインストールまたは構成が正しく行えなかったか、または SQL*Net Easy Configuration ユーティリティまたは Oracle Net8 Easy Configuration ユーティリティを使用した場合に、Oracle サーバーの透過ネットワーク 基板 (TNS) サービス エイリアスが正しく作成されていません。 必要な Oracle コンポーネントが正しくインストールされ、構成されていることを確認するには、Oracle データベース管理者 (DBA) に問い合わせてください。

  2. コンピューターにインストールされている Oracle クライアントのバージョン (SQL * Net バージョン) を確認します。 Oracle 用の Microsoft ODBC ドライバーとクライアント Microsoft OLE DB Provider for Oracleクライアント コンピューターに SQL*Net バージョン 2.3 以降をインストールする必要があります。

    SQL Plus (Oracle クライアント クエリ ツール) からの接続が機能するように見えるかもしれませんが、ODBC/OLE DB 接続が正しく機能するには、コンピューターを再起動する必要があります。

    注意

    Oracle 8i を使用すると、.rgs ファイルは空になります。

  3. Oracle クライアントがインストールされ、Oracle クライアント コンポーネント 7.3 以降をコンピューターにインストールする必要があるというエラーが表示される場合は、クライアント コンピューター上の環境変数 PATH に、Oracle クライアントがインストールされたフォルダー (Oracle_Root\Bin など) が含まれているかどうかを確認します。 このフォルダーが見つからない場合は、フォルダーを PATH 変数に追加してエラーを解決します。

  4. ファイルが Ociw32.dll\bin フォルダー Oracle_Root確認します。 この.dllファイルは、クライアント コンピューター上の他の場所に存在できません。 Oracle クライアント コンポーネント DLL (Core40.dll ファイルや Ora.dll ファイルなど) が Oracle_Root フォルダーまたはサブフォルダー * の外側に 存在しなかOracle_Root確認します。

  5. 1 つの Oracle クライアント バージョンがコンピューターにインストールされていることを確認します。 複数のバージョンの SQL*Net は、干渉や重要な操作 (TNS やエイリアス参照など) を使用して、同じクライアント コンピューター上に存在できません。

  6. Microsoft では、Oracle クライアントのローカル インストールを行い、リモート Oracle クライアントをコンピューターにマッピングして、ODBC/OLE DB を介して Oracle に接続するシステムのパスに含め、この操作を行なうのを推奨します。 ただし、プロバイダーとドライバーは、ネットワーク共有ではなく、ローカルにインストールされた Oracle クライアントでテストされます。

関連項目