Oracle リンク サーバー クエリを実行すると、SQL Server サービスがクラッシュする

この記事は、Oracle リンク サーバー クエリを実行するときに発生する可能性がある問題を解決するのに役立ちます。

元の製品バージョン: SQL Server
元の KB 番号: 2295405

現象

次のような状況で問題が発生します。

  • windows Server を実行しているコンピューターにSQL Serverをインストールします。
  • Oracle データベースのリンク サーバーを作成します。
  • OraOLEDB プロバイダー (OLEDB Provider for Oracle) を使用して、リンク サーバー クエリを実行します。

このシナリオでは、SQL Server サービスがクラッシュし、クエリの結果は返されません。 さらに、次の問題が発生する場合があります。

  • Windows システム イベント ログに次のエラー メッセージが表示されます。

    SQL Server (MSSQLSERVER) サービスが予期せず終了しました。 この 1 回が完了しました。

  • SQL Server プロセスのミニダンプ ファイルがヒープ破損で生成され、次のような例外メッセージが表示されます。

    minidump.mdmp では、ntdll!Microsoft Corporation からの C:\Windows\System32\ntdll.dll の RtlReportCriticalFailure+62 が、スレッド 235 で不明な例外 (0xc0000374) を引き起こしました
    または、エラーログで別の例外が発生する場合があります。
    SqlDumpExceptionHandler: プロセス 74 で生成された致命的な例外 c0000005 EXCEPTION_ACCESS_VIOLATION。 SQL Serverはこのプロセスを終了しています。

  • ミニダンプ ファイルのスタックには、 Sqlserver.exe プロセス内のサード パーティ製モジュールが含まれています。 たとえば、ミニダンプ ファイルには、Oracle モジュールに次の情報が含まれています。

    OraOLEDButl11
    OraOLEDBrst11
    OraOLEDBrst10
    
    Full Call Stack:
    
    ntdll!RtlReportCriticalFailure+62 
    ntdll!RtlpReportHeapFailure+26 
    ntdll!RtlpHeapHandleError+12 
    ntdll!RtlpLogHeapFailure+a4 
    ntdll!RtlFreeHeap+1aa8f 
    ole32!CoTaskMemFree+36 
    OraOLEDButl11+1a5f 
    0x403d6b00 
    0x00000001 
    0x4d200e30 
    0x00000024 
    0x403d7ab8 
    OraOLEDBrst11+12843 
    0x403b8c00 
    0x403c95f0 
    0x403ca610 
    0x403ca610 
    0x403c95f0 
    OraOLEDBrst11+128b1 
    0x403d7ab8 
    0x403c95f0 
    0x4966a260 
    0x05cd21e0 
    

サードパーティの情報に関する免責事項

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

原因

この問題は、Oracle リンク サーバーへのクエリに特殊文字 -- が存在するため発生します。 これらの文字は、コメント 記号を示すために使用されます。

サード パーティのリンク サーバー プロバイダーがプロセス内SQL Server読み込まれ、そのプロセスに属していないヒープ メモリが誤って変更されるため、SQL Server プロセスがクラッシュします。 プロセス内の ヒープ関数 が不安定な場合、データ破損からの保護のために、プロセスは OS によって自動的にシャットダウンされます。 サード パーティのリンク サーバー プロバイダーが [プロセスの許可] オプションと共に有効になっている場合、サード パーティのリンク サーバーで説明されている問題が発生すると、SQL Server プロセスがクラッシュします。

回避策

場合によっては、次のいずれかの方法で問題が解決されます。

  • コメント 記号を削除します。
  • コメント記号を に /* */置き換えます。

解決方法

情報と最新の修正プログラムについては、サード パーティのプロバイダーにお問い合わせください。 最新の OLEDB プロバイダー バージョンについては、「 64 ビット Oracle Data Access Components (ODAC) ダウンロード」を参照してください。