SQL Server で Oracle へのリンク サーバーのセットアップおよびトラブルシューティングを行う方法

文書翻訳 文書翻訳
文書番号: 280106 - 対象製品
重要 : この資料には、レジストリの編集方法が記載されています。万一に備えて、編集の前には必ずレジストリをバックアップし、レジストリの復元方法を理解しておいてください。バックアップ、復元、および編集方法の詳細を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
256986 Microsoft Windows レジストリの説明
すべて展開する | すべて折りたたむ

目次

概要

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

Oracle へのリンク サーバーのセットアップ手順

  1. Oracle クライアント ソフトウェアは、リンク サーバーをセットアップする SQL Server コンピュータにインストールする必要があります。
  2. SQL Server を実行しているコンピュータに必要なドライバをインストールします。マイクロソフトでは、Microsoft OLE DB Provider for Oracle と Microsoft ODBC Driver for Oracle のみをサポートしています。サードパーティのプロバイダまたはドライバを使用して Oracle に接続する場合、それらのプロバイダまたはドライバの使用によって発生する可能性がある問題については、各製造元に問い合わせる必要があります。
  3. Microsoft OLE DB Provider for Oracle と Microsoft ODBC Driver for Oracle を使用する場合は、次のことを考慮してください。
    • Microsoft Data Access Components (MDAC) に同梱されている OLE DB プロバイダと ODBC ドライバでは、どちらも SQL*Net 2.3.x 以降のバージョンを必要とします。クライアント コンピュータには、Oracle 7.3.x 以降のクライアント ソフトウェアをインストールする必要があります。クライアント コンピュータとは、SQL Server を実行しているコンピュータです。
    • SQL Server を実行しているコンピュータに MDAC 2.5 以降がインストールされていることを確認してください。MDAC 2.1 以前のバージョンを使用すると、Oracle 8.x 以降のバージョンを使用するデータベースに接続できません。
    • MDAC 2.5 以降のバージョンを Oracle クライアント ソフトウェアで使用できるようにするには、SQL Server を実行しているクライアント コンピュータのレジストリを次の表のように変更する必要があります。
                    Microsoft Windows NT、
      Oracle      Microsoft Windows 95、
      クライアント  Windows 98、Windows 98 SE        Microsoft Windows 2000 
      --------------------------------------------------------------------------
      
      7.x        [HKEY_LOCAL_MACHINE\SOFTWARE     [HKEY_LOCAL_MACHINE\SOFTWARE
                 \Microsoft\TransactionServer     Microsoft\MSDTC\MTxOCI]
                 \Local Computer\My Computer]     "OracleXaLib"="xa73.dll"
                 "OracleXaLib"="xa73.dll"         "OracleSqlLib"="SQLLib18.dll"
                 "OracleSqlLib"="SQLLib18.dll"    "OracleOciLib"="ociw32.dll"
                 "OracleOciLib"="ociw32.dll"
      
      8.0        [HKEY_LOCAL_MACHINE\SOFTWARE     [HKEY_LOCAL_MACHINE\SOFTWARE
                 \Microsoft\Transaction Server    \Microsoft\MSDTC\MTxOCI]
                 \Local Computer\My Computer]     "OracleXaLib"="xa80.dll"
                 "OracleXaLib"="xa80.dll"         "OracleSqlLib"="sqllib80.dll"
                 "OracleSqlLib"="sqllib80.dll"    "OracleOciLib"="oci.dll"
                 "OracleOciLib"="oci.dll"
      
      8.1        [HKEY_LOCAL_MACHINE\SOFTWARE     [HKEY_LOCAL_MACHINE\SOFTWARE
                 \Microsoft\Transaction Server    \Microsoft\MSDTC\MTxOCI]
                 \Local Computer\My Computer]     "OracleXaLib"="oraclient8.dll"
                 "OracleXaLib"="oraclient8.dll"   "OracleSqlLib"="orasql8.dll"
                 "OracleSqlLib"="orasql8.dll"     "OracleOciLib"="oci.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 パラメータに使用します。詳細については、SQL Server Books Online の「sp_addlinkedserver」を参照してください。

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

警告 : レジストリ エディタまたは別の方法を使用してレジストリを誤って変更すると、深刻な問題が発生することがあります。最悪の場合、オペレーティング システムの再インストールが必要になることがあります。マイクロソフトは、レジストリの変更により発生した問題に関しては、一切責任を負わないものとします。レジストリの変更は、自己の責任において行ってください。

次の 2 つの方法のいずれかを使用して、分散クエリの実行時に発生するエラーの詳細情報を取得できます。
  • 方法 1
    クエリ アナライザで、次のコードを実行してトレース フラグ 7300 を有効にします。
    DBCC Traceon(7300)
  • 方法 2
    SQL プロファイラで、"エラーと警告" イベント カテゴリの "OLEDB Errors" イベントをキャプチャします。エラー メッセージの形式は次のとおりです。
    Interface::Method failed with hex-error code.
    MDAC ソフトウェア開発キット (SDK) に含まれている Oledberr.h ファイルで 16 進数のエラー コードを検索できます。
一般的な 10 個のエラー メッセージとそのエラー メッセージのトラブルシューティング方法を次に示します。

: パフォーマンスに関連した問題については、SQL Server Books Online の「分散クエリの最適化」を参照してください。
  • メッセージ 1
    エラー 7399 : OLE DB プロバイダ '%ls' はエラーをレポートしました。%ls
    詳細な OLEDB エラー情報を取得するには、トレース フラグ 7300 を有効にするか、SQL プロファイラを使用して "OLEDB Errors" イベントをキャプチャします。
  • メッセージ 2a
    "ORA-12154: TNS:could not resolve service name"
    メッセージ 2b
    "The Oracle(tm) client and networking components were not found. These components are supplied by Oracle Corporation and are part of the Oracle Version 7.3.3 (or greater) client software installation"
    Oracle の接続の問題を解決する方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
    259959 [INFO] ODBC ドライバと OLE DB プロバイダを使用して Oracle サーバーに接続するときの問題をデバッグする方法
  • メッセージ 3
    エラー 7302: OLE DB プロバイダ 'MSDAORA' のインターフェイスを作成できませんでした。
    MSDAORA.dll ファイルが正しく登録されていることを確認します (MSDAORA.dll ファイルは Microsoft OLE DB provider for Oracle ファイルです)。また、RegSvr32.exe を使用して Microsoft OLE DB Provider for Oracle を登録します。登録が失敗した場合は、Microsoft Data Access Components (MDAC) を再インストールします。MDAC の詳細については、次の Microsoft Developer Network (MSDN) Web サイトを参照してください。
    http://www.microsoft.com/japan/msdn/data/default.asp
    : サードパーティの Oracle プロバイダを使用していて、その Oracle プロバイダを SQL Server プロセス外部で実行できない場合、プロバイダ オプションを変更してインプロセスで実行できるようにします。プロバイダ オプションを変更するには、次のいずれかの方法を使用します。
    • 方法 1
      次のレジストリ キーに移動してから、AllowInProcess (DWORD) エントリの値を 1 に変更します。このレジストリ キーは、対応するプロバイダ名の下にあります。
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\ProviderName
    • 方法 2
      新しくリンク サーバーを追加するときに、SQL Server Enterprise Manager で [InProcess 許可] オプションを直接設定します。これを行うには、[プロバイダ オプション] をクリックし、[InProcess 許可] チェック ボックスをオンにします。
  • メッセージ 4
    エラー 7303: OLE DB プロバイダ 'MSDAORA' のデータ ソース オブジェクトを初期化できませんでした。[OLE/DB provider returned message: ORA-01017: invalid username/password; logon denied] OLE DB エラー トレース [OLE/DB Provider 'MSDAORA' IDBInitialize::Initialize returned 0x80040e4d]。
    このエラー メッセージは、リンク サーバーに適切なログインのマッピングが存在しないことを示します。sp_helplinkedsrvlogin ストアド プロシージャを実行すると、ログイン情報を正しく設定できます。また、リンク サーバーの構成に適切なパラメータが指定されていることも確認します。
  • メッセージ 5
    エラー 7306: OLE DB プロバイダ 'MSDAORA' からテーブル ' %ls' を開けませんでした。指定したテーブルは存在しません。[OLE/DB provider returned message: Table does not exist.][OLE/DB provider returned message: ORA-00942: table or view does not exist]OLE DB エラー トレース [OLE/DB Provider 'MSDAORA' IOpenRowset::OpenRowset returned 0x80040e37: The specified table does not exist.]
    エラー 7312: OLE DB プロバイダ '%ls' のスキーマまたはカタログの無効使用です。4 部構成の名前が指定されましたが、プロバイダはカタログまたはスキーマを使用するのに必要なインターフェイスを公開していません。
    エラー 7313: プロバイダ '%ls' で指定したスキーマまたはカタログが無効です。
    エラー 7314: OLE DB プロバイダ '%ls' はテーブル '%ls' を持っていません。
    上記のエラー メッセージが表示される場合、テーブルが Oracle スキーマに存在しないか、そのテーブルへのアクセス許可がない可能性があります。入力したスキーマ名が大文字であることを確認してください。テーブルとその列のアルファベットの大文字小文字は、Oracle システム テーブルに指定されている名前と一致している必要があります。

    Oracle 側では、二重引用符を使用せずに作成したテーブルまたは列は大文字で保存されます。テーブルまたは列が二重引用符で囲まれている場合は、そのままの状態で保存されます。

    次の呼び出しを実行すると、Oracle スキーマにテーブルが存在するかどうかが表示されます。また、正確なテーブル名も表示されます。
    sp_tables_ex  @table_server=Ora817Link, @table_schema='your_schema_name'
    エラー メッセージ 7306 の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
    240340 [SQL] PRB: Oracle への分散クエリで "Could not open table"
  • メッセージ 6
    エラー 7413: 権限の委譲ができないので、Windows NT 認証ログインを実行できませんでした。
    メッセージ 18456、レベル 14、状態 1、行 1 ユーザー '\' はログインできませんでした。
    次の説明は SQL Server Books Online からの抜粋です。
    このエラー メッセージは、Microsoft Windows 認証ログインに対する明示的なマッピングなしで分散クエリを実行しようとしていることを示しています。セキュリティの委譲が行われないオペレーティング システムの環境では、Windows NT 認証ログインは、sp_addlinkedsrvlogin を使用して生成されたリモート ログインおよびパスワードへの明示的なマッピングを必要とします。
  • メッセージ 7
    エラー 7354: OLE DB プロバイダ 'MSDAORA' は列 '%ls' に対して無効なメタ データを提供しました。データ型はサポートされていません。
    このエラー メッセージが表示された場合は、次の「サポート技術情報」 (Microsoft Knowledge Base) の資料に記載されている問題が発生している可能性があります。
    243027 [FIX] SQL Server 7 Oracle の Numeric 列でエラー 7354 が発生する
  • メッセージ 8
    エラー 7356: OLE DB プロバイダ 'MSDAORA' は列に対して一貫性のないメタ データを提供しました。実行時にメタ データ情報が変更されました。
    リンク サーバー クエリで Oracle ビューを使用している場合、次の「サポート技術情報」 (Microsoft Knowledge Base) の資料に記載されている問題が発生している可能性があります。
    251238 分散クエリが MSDAORA でエラー 7356 を返す
  • メッセージ 9
    エラー 7391: OLE DB プロバイダ 'MSDAORA' は分散トランザクションを開始できなかったので、要求した操作は実行されませんでした。OLE DB エラー トレース [OLE/DB Provider 'MSDAORA' ITransactionJoin::JoinTransaction returned 0x8004d01b]
    この資料で既に説明したとおり、OCI バージョンが正しく登録されているかどうかを確認します。

    : レジストリ エントリがすべて正しい場合、MtxOCI.dll ファイルが読み込まれます。MtxOCI.dll が読み込まれないと、Microsoft OLE DB Provider for Oracle または Microsoft ODBC Driver for Oracle を使用し、Oracle に対して分散トランザクションを実行できません。サードパーティのプロバイダを使用していてエラー 7391 が発生する場合は、使用している OLE DB プロバイダで分散トランザクションがサポートされているかどうかを確認します。分散トランザクションがサポートされている場合は、Microsoft 分散トランザクション コーディネータ (MSDTC) が実行されていることを確認します。
  • メッセージ 10
    エラー 7392: OLE DB プロバイダ 'MSDAORA' のトランザクションを開始できませんでした。OLE DB エラー トレース [OLE/DB Provider 'MSDAORA' ITransactionLocal::StartTransaction returned 0x8004d013: ISOLEVEL=4096]。
    次の説明は SQL Server Books Online からの抜粋です。
    セッションではトランザクションは 1 つだけが有効なので、OLE DB プロバイダはエラー 7392 を返しました。このエラーは、接続が明示的または暗黙のトランザクション内にあって、OLE DB プロバイダがネストしたトランザクションをサポートしていない場合、データを変更するステートメントが OLE DB プロバイダに対して実行されることを示しています。SQL Server ではこのサポートが必要です。これによって、特定のエラー発生条件において、トランザクションを続行している間のデータ変更ステートメントの影響を止めることができます。
    SET XACT_ABORT が ON の場合、SQL Server では、入れ子になったトランザクションが OLE DB プロバイダによってサポートされている必要はありません。このため、使用している OLEDB プロバイダで入れ子になったトランザクションがサポートされていない場合は、SET XACT_ABORT ON を実行してから、暗黙的または明示的なトランザクション内のリモート テーブルに対してデータ変更ステートメントを実行します。

関連情報

関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
244661 [INFO] Microsoft Oracle ODBC ドライバおよび OLE DB プロバイダの制限事項
259959 ODBC ドライバと OLE DB プロバイダを使用して Oracle サーバーに接続するときの問題をデバッグする方法
239719 Microsoft ODBC Driver/OLE DB provider for Oracle での Oracle 8.x のサポート
193893 [INFO] MTS と COM+ で Oracle を使用する
191168 [INFO] エラー "-2147168246 (8004d00a)" オブジェクトのトランザクション呼び出し中に参加に失敗しました
DB2 とリンク サーバーを一緒に使用する方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
218590 [SNA] OLE DB プロバイダ (DB2 用) データ ソースの設定
216428 [SNA] Microsoft ODBC ドライバ (DB2 用) の設定

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 280106 (最終更新日 2005-08-17) を基に作成したものです。

この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。

プロパティ

文書番号: 280106 - 最終更新日: 2011年5月14日 - リビジョン: 8.0
この資料は以下の製品について記述したものです。
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 64-bit Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Workgroup Edition
キーワード:?
kbsqlmanagementtools kbhowtomaster KB280106
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com