SQL Server servicio se bloquea al ejecutar una consulta de servidor vinculado de Oracle

Este artículo le ayuda a resolver un problema que puede producirse al ejecutar una consulta de servidor vinculado de Oracle.

Versión del producto original: SQL Server
Número de KB original: 2295405

Síntomas

Imagine la siguiente situación:

  • Instale SQL Server en un equipo que ejecuta Windows Server.
  • Se crea un servidor vinculado para una base de datos de Oracle.
  • Ejecute una consulta de servidor vinculado mediante el proveedor OraOLEDB (proveedor OLEDB para Oracle).

En este escenario, el servicio SQL Server se bloquea y no se devuelve ningún resultado para la consulta. Además, puede observar los siguientes problemas:

  • Recibirá el siguiente mensaje de error en el registro de eventos del sistema de Windows:

    El servicio SQL Server (MSSQLSERVER) finalizó inesperadamente. Lo ha hecho 1 vez.

  • Se genera un archivo de minivolcado del proceso de SQL Server con daños en el montón y recibe un mensaje de excepción similar al siguiente:

    En minidump.mdmp, la instrucción de ensamblado en ntdll! RtlReportCriticalFailure+62 en C:\Windows\System32\ntdll.dll de Microsoft Corporation ha provocado una excepción desconocida (0xc0000374) en el subproceso 235
    O, a veces, también en el registro de errores se puede ver otra excepción:
    SqlDumpExceptionHandler: el proceso 74 generó una excepción irrecuperable c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server está terminando este proceso.

  • La pila del archivo minidump contiene módulos de terceros dentro del proceso deSqlserver.exe . Por ejemplo, el archivo minidump contiene la siguiente información en los módulos de 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 
    

Aviso de declinación de responsabilidades sobre la información de terceros

Los productos de otros fabricantes que se mencionan en este artículo han sido creados por compañías independientes de Microsoft. Microsoft no ofrece ninguna garantía, ya sea implícita o de otro tipo, sobre la confiabilidad o el rendimiento de dichos productos.

Causa

Este problema se produce porque los caracteres -- especiales existen en la consulta al servidor vinculado de Oracle. Estos caracteres se usan para indicar un símbolo de comentario.

El proceso de SQL Server se bloquea porque el proveedor de servidores vinculado de terceros se carga dentro de SQL Server proceso y modifica incorrectamente la memoria del montón que no le pertenece. Si las funciones de montón dentro de un proceso son inestables, para protegerse contra daños en los datos, el sistema operativo apagará automáticamente el proceso. Si el proveedor de servidores vinculado de terceros está habilitado junto con la opción Permitir inprocesamiento, el proceso de SQL Server se bloquea cuando el servidor vinculado de terceros experimenta el problema descrito.

Solución alternativa

En algunos casos, uno de los métodos siguientes resuelve el problema:

  • Quite el símbolo de comentarios.
  • Reemplace el símbolo de comentarios por /* */.

Solución

Póngase en contacto con el proveedor de terceros para obtener información y correcciones más recientes. Para obtener la versión más reciente del proveedor OLEDB, consulte Descargas de componentes de oracle data access (ODAC) de 64 bits.