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 original del producto:   SQL Server
Número KB original:   2295405

Síntoma

Imagine la siguiente situación:

  • Se instala SQL Server en un equipo que ejecuta Windows Server.

  • Se crea un servidor vinculado para una base de datos de Oracle.

  • La opción Permitir procesamiento se habilita en el cuadro de diálogo opciones para el proveedor de servidores vinculados.

    Nota

    De forma predeterminada, la opción no está seleccionada.

  • Puede ejecutar una consulta de servidor vinculado mediante el proveedor OraOLEDB.

En este escenario, el SQL Server se bloquea y no se devuelven resultados para la consulta. Además, puede encontrarse con los siguientes problemas:

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

    El 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 in C:\Windows\System32\ntdll.dll from Microsoft Corporation has caused an unknown exception (0xc0000374) on thread 235
    O, como alternativa, en el registro de errores se puede ver otra excepción:
    SqlDumpExceptionHandler: el proceso 74 generó una excepción grave c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server está finalizando este proceso.

  • La pila del archivo minidump contiene módulos de terceros dentro del Sqlserver.exe proceso. Por ejemplo, el archivo minidump contiene la siguiente información en módulos de Oracle:

    OraOLEDButl11
    OraOLEDBrst11
    OraOLEDBrst10
    
    Full Call Stack: Function Arg 1 Arg 2 Arg 3 Arg 4
    
    ntdll!RtlReportCriticalFailure+62 00000000`00000002 00000000`00000023 00000000`403cc8a2 00000000`00000003
    ntdll!RtlpReportHeapFailure+26 00000000`403c95f0 00000000`403d7a78 00000000`403d7ab0 00000000`4d200e30
    ntdll!RtlpHeapHandleError+12 00000000`04180000 00000000`00000000 00000000`00000000 00000000`00000000
    ntdll!RtlpLogHeapFailure+a4 00000000`403d7b40 00000000`04180000 00000000`403d7b50 00000000`00000008
    ntdll!RtlFreeHeap+1aa8f 00000000`00000020 00000000`403cd850 00000000`00000001 00000000`403d0024
    ole32!CoTaskMemFree+36 00000000`403d6b00 00000000`00000001 00000000`4d200e30 00000000`00000024
    OraOLEDButl11+1a5f 00000000`00000001 00000000`4d200e30 00000000`00000024 00000000`403d7ab8
    0x403d6b00 00000000`4d200e30 00000000`00000024 00000000`403d7ab8 00000000`24492843
    0x00000001 00000000`00000024 00000000`403d7ab8 00000000`24492843 00000000`403b8c00
    0x4d200e30 00000000`403d7ab8 00000000`24492843 00000000`403b8c00 00000000`403c95f0
    0x00000024 00000000`24492843 00000000`403b8c00 00000000`403c95f0 00000000`403ca610
    0x403d7ab8 00000000`403b8c00 00000000`403c95f0 00000000`403ca610 00000000`403ca610
    OraOLEDBrst11+12843 00000000`403c95f0 00000000`403ca610 00000000`403ca610 00000000`403c95f0
    0x403b8c00 00000000`403ca610 00000000`403ca610 00000000`403c95f0 00000000`244928b1
    0x403c95f0 00000000`403ca610 00000000`403c95f0 00000000`244928b1 00000000`403d7ab8
    0x403ca610 00000000`403c95f0 00000000`244928b1 00000000`403d7ab8 00000000`403c95f0
    0x403ca610 00000000`244928b1 00000000`403d7ab8 00000000`403c95f0 00000000`4966a260
    0x403c95f0 00000000`403d7ab8 00000000`403c95f0 00000000`4966a260 00000000`05cd21e0
    OraOLEDBrst11+128b1 00000000`403c95f0 00000000`4966a260 00000000`05cd21e0 00000000`00000000
    0x403d7ab8 00000000`4966a260 00000000`05cd21e0 00000000`00000000 00000000`2449ca03
    0x403c95f0 00000000`05cd21e0 00000000`00000000 00000000`2449ca03 00000000`4d200e30
    0x4966a260 00000000`00000000 00000000`2449ca03 00000000`4d200e30 00000000`00000001
    0x05cd21e0 00000000`2449ca03 00000000`4d200e30 00000000`00000001 00000000`05cd21e0
    

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 como símbolo de comentario.

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

Solución alternativa

Para resolver este problema, use uno de los métodos siguientes:

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

Más información

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