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

Se aplica a: Microsoft SQL Server 2005 Enterprise EditionSQL Server 2008 EnterpriseSQL Server 2008 R2 Enterprise

Síntoma


Imagine la siguiente situación:
  • Instala Microsoft SQL Server en un equipo que ejecuta Windows Server.
  • Cree un servidor vinculado para una base de datos de Oracle.
  • Habilite la opción permitir el proceso en el cuadro de diálogo Opciones para el proveedor del servidor vinculado. Nota De forma predeterminada, la opción no está seleccionada.
  • Ejecuta una consulta de servidor vinculada con el proveedor OraOLEDB.
En este escenario, el servicio de SQL Server se bloquea y no se devuelven resultados para la consulta. Además, puede encontrarse con los siguientes problemas:
  • Recibe el siguiente mensaje de error en el registro de eventos del sistema de Windows:
    ---------------------------------- El servicio SQL Server (MSSQLSERVER) terminó inesperadamente. Lo ha hecho 1 vez. ----------------------------------
  • Un archivo de minivolcado del proceso de SQL Server se genera con daños en la pila y recibe un mensaje de excepción similar al siguiente:
    En minivolcado. 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, en ocasiones, también puede ver otra excepción en el ErrorLog: SqlDumpExceptionHandler: el proceso 74 generó una excepción grave c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server está finalizando este proceso.
  • La pila del archivo de minivolcado contiene módulos de terceros en el proceso SQLServer. exe. Por ejemplo, el archivo de minivolcado contiene la siguiente información en módulos de Oracle:
    OraOLEDButl11 OraOLEDBrst11 OraOLEDBrst10 Pila de llamadas completas: función 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

Causa


Este problema se produce porque los caracteres especiales "--" existen en la consulta del servidor vinculado de Oracle. Estos caracteres se usan como símbolo de comentario.

El proceso de SQL Server se bloquea porque el proveedor de servidor vinculado de terceros se carga dentro del proceso de SQL Server y modifica incorrectamente la memoria del montón que no pertenece a él. Si el montón predeterminado dentro de un proceso es inestable, para protegerse de los datos dañados, el sistema operativo apaga el proceso automáticamente. Si el proveedor de servidor vinculado de terceros está habilitado junto con la opción permitir InProcess, el proceso de SQL Server se bloquea cuando este servidor vinculado de terceros experimenta el problema descrito.

Solución alternativa


Para resolver este problema, utilice uno de los métodos siguientes:
  • Quite el símbolo Comentarios.
  • Reemplace el símbolo de comentarios con el símbolo de los siguientes comentarios: 
    /* */

Más información


Para obtener información y soluciones, comunícate con el proveedor de terceros. Para obtener la versión más reciente del proveedor de OLEDB, visite: