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.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de