Поделиться через


Служба SQL Server завершается сбоем при выполнении запроса связанного сервера Oracle

Эта статья поможет устранить проблему, которая может возникнуть при выполнении запроса связанного сервера Oracle.

Исходная версия продукта: SQL Server
Исходный номер базы знаний: 2295405

Симптомы

Рассмотрим следующий сценарий:

  • Sql Server устанавливается на компьютере под управлением Windows Server.
  • Вы создаете связанный сервер для базы данных Oracle.
  • Запрос связанного сервера выполняется с помощью поставщика OraOLEDB (поставщик OLEDB для Oracle).

В этом сценарии служба SQL Server завершает работу, и для запроса не возвращаются результаты. Кроме того, вы можете заметить следующие проблемы:

  • В системном журнале событий Windows появится следующее сообщение об ошибке:

    Служба SQL Server (MSSQLSERVER) неожиданно завершается. Это сделал 1 раз.

  • Мини-файл процесса SQL Server создается с повреждением кучи, и вы получаете сообщение об исключении, похожее на следующее:

    В minidump.mdmp инструкция сборки по ntdll! RtlReportCriticalFailure+62 в C:\Windows\System32\ntdll.dll от корпорации Майкрософт вызвало неизвестное исключение (0xc0000374) в потоке 235
    Или иногда в журнале ошибок можно увидеть другое исключение:
    SqlDumpExceptionHandler: процесс 74 создал неустранимый исключение c000005 EXCEPTION_ACCESS_VIOLATION. SQL Server завершает этот процесс.

  • Стек мини-файла содержит сторонние модули внутри процесса Sqlserver.exe . Например, мини-dump-файл содержит следующие сведения в модулях 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 
    

Заявление об отказе от ответственности за сведения о продуктах сторонних производителей

В этой статье упомянуты программные продукты независимых производителей. Корпорация Microsoft не дает никаких гарантий, подразумеваемых и прочих, относительно производительности и надежности этих продуктов.

Причина

Эта проблема возникает из-за того, что специальные символы -- существуют в запросе к связанному серверу Oracle. Эти символы используются для обозначения символа комментария.

Процесс SQL Server завершается сбоем, так как сторонний поставщик связанного сервера загружается внутри процесса SQL Server и неправильно изменяет память кучи, которая не принадлежит ей. Если функции кучи внутри процесса неустойчивы, для защиты от повреждения данных процесс автоматически завершается операционной системой. Если сторонний поставщик связанного сервера включен вместе с параметром Allow inprocess , процесс SQL Server завершается сбоем, когда сторонний связанный сервер испытывает описанную проблему.

Обходное решение

В некоторых случаях один из следующих методов решает проблему:

  • Удалите символ примечаний.
  • Замените символ /* */примечаний на .

Решение

Обратитесь к стороннему поставщику для получения сведений и последних исправлений. Последние версии поставщика OLEDB см . в 64-разрядных файлах загрузки компонентов доступа к данным Oracle (ODAC).