none
リンクサーバー:機器入替を行うとリンクサーバーが動作しなくなった RRS feed

  • 質問

  • SQLSERVERから別サーバのOracleDatabaseをリンクサーバー機能で更新(Delete & Insert)をしています。
    更新元(SQLSERVER側)の機器を入れ替えたところDelete、Insertともエラーが出るようになり困っています。
    調査にあたり勘所などをご教示いただけますと幸いです。

    エラー内容:
    リンク サーバー "<リンクサーバー名>" の OLE DB プロバイダー "OraOLEDB.Oracle" から、メッセージ "メッセージ番号 0x80040e21 のメッセージ文が OraOLEDB のメッセージ ファイルに見つかりません。" が返却されました。
    メッセージ 7345、レベル 16、状態 1、行 1
    リンク サーバー "<リンクサーバー名> の OLE DB プロバイダー "OraOLEDB.Oracle" でテーブル "SELECT * FROM <更新先テーブル名(Oracle側)>" から削除できませんでした。RPC 障害などの復旧可能なプロバイダー固有のエラーが発生しました。

    プロダクト情報:
    更新元(SQLSERVER側)機器入替前 ※正常に動いていた
    OS:Windows Server 2012
    DB:SQL SERVER 2012 Standard Edition
    Provider:Oracle Provider for OLE DB (Oracle Client 12.1同梱のプロバイダ使用)

    更新元(SQLSERVER側)機器入替後 ※エラーが発生している
    OS:Windows Server 2016
    DB:SQL SERVER 2016 Standard Edition SP1
    Provider:Oracle Provider for OLE DB (Oracle Client 12.2同梱のプロバイダ使用)

    更新先(Oracle側)
    OS:Windows Server2016
    DB:Oracle Database 12c Standard Edition Release 12.2.0.1.0 64bit

    なお、Oracle側は特にエラーログ等の出力がなく問題がありませんでした。

    よろしくお願いいたします。

    2020年12月11日 4:36

すべての返信

  • リンクサーバーのプロパティで RPC/RPC出力 が有効になっているか確認してみると良いかもしれません。

    また、問題の切り分けとして、Oracle Client のバージョンを Oracle Client 12.1 に戻した場合、正常に動作するようになるかを確認されると良いかと思います。





    • 編集済み NOBTA 2020年12月14日 7:23
    2020年12月12日 3:46
  • お返事をいただきましてありがとうございます。

    サーバーがすぐに見れる状況にないので、ご提案いただいた内容を確認しましたら、また結果をご報告させていただきます。

    j21925

    2020年12月14日 2:32
  • 本件、ご指摘の内容を確認しましたが、事象が改善しませんでした。
    ・RPC/RPC出力のプロパティ設定
     過去利用していた設定でsqlserver2005以降は本設定の変更はあまり有効ではないようです。
     (設定変更はしてみたものの開園は見られませんでした)

    ・Oracle Client のバージョン
     Oracleホームページにて、WindowsServer2016の対応バージョンがOracle12.2以降との記述があるため、ダウングレードの対応は勝手ながら見送らせていただきました。

    引き続き確認箇所などご指導いただきたく、何卒よろしくお願いいたします。

    j21925

    2020年12月22日 0:42
  • OPENQUERY で Insert/delete を実行した場合は正常に動作するかを確認されてはいかがでしょう? ちなみに、Oracle 12c はPluggable Database (PDB) でしょうか、また、SELECT クエリの場合は正常に動作しますでしょうか?

    【Tips】Oracle Provider for OLEDB リンクサーバー経由でクエリを実行する場合のベストプラクティス 【保存版】
    https://www.nobtak.com/entry/linkedora2

    2020年12月22日 1:35
  • 早速のご連絡をいただきましてありがとうございます。

    情報が小出しになってしまい申し訳ございません。
    Delete & InsertはOPENQUERYで実装しており、実施結果は以下の通りです。
    select ○
    delete ×
    insert ×
    なお、機器入替前も同様の実装としており、
    select、delete、insertとも実行に問題はありませんでした。

    Oracle側の情報は少ないですが、プラガブルデータベースではないはずです。
    (担当の方より「普通のデータベースですよ」とだけ聞いておりまして)

    また、ご参考までに、Oralce側の情報は以下の通りとなります。
    OS:Windows Server 2016
    Database:Oracle Database 12c Standard Edition Release 12.2.0.1.0 64bit

    よろしくお願いいたします。

    j21925

    2020年12月22日 8:35
  • OPENQUERYで実行しているのであれば、プロバイダ側の問題、もしくは、実行されているクエリ内容に起因した問題なのかもしれません。

    リンク元 : Windows Server 2019 + SQL Server 2019 + 64-bit ODAC 12.2c Release 1 (12.2.0.1.0) 、リンク先 : Windows Server 2019 + Oracle 12.2c EE で簡単なリンクサーバーを作ってみましたが、OPENQUERY 経由で INSERT/DELETE はできるもようです。


    【Tips】Oracle Provider for OLEDB をアウトプロセスとしてリンクサーバーを設定する方法について 【保存版】
    https://www.nobtak.com/entry/linkedora1

    問題の切り分けとして、仮に Oracle Provider for OLEDB を インプロセスとしてリンクサーバーを設定されている場合は、アウトプロセスとして設定することで現象が解消するかなどを確認してみても良いかもしれません。

    また、実現性は確認はできていませんが、ODBC経由でリンクサーバーを設定するなど、インターフェースを変えることで現象が解消できるかなども確認してみると良いかもしれません。

    2020年12月22日 16:20