REVISIÓN: Puede recibir un mensaje de error de infracción de acceso cuando se ejecuta un plan de ejecución en paralelo en SQL Server 2005

Seleccione idioma Seleccione idioma
Id. de artículo: 912885 - Ver los productos a los que se aplica este artículo
Nº DE ERROR: 420246 (SQLBUDT)
Microsoft distribuye las revisiones de Microsoft SQL Server 2005 como un archivo descargable. Dado que las revisiones son acumulativas, cada versión nueva contiene todas las revisiones y revisión de todas las revisiones de seguridad incluidas en la versión anterior de SQL Server 2005.
Expandir todo | Contraer todo

En esta página

Resumen

Este artículo describe lo siguiente acerca de esta versión de hotfix:
  • Los problemas corregidos por el paquete de hotfix
  • Los requisitos previos para instalar el paquete de hotfix
  • Si debe reiniciar el equipo después de instalar el paquete de hotfix
  • Si el paquete de revisiones es reemplazado o no por otro paquete de hotfix
  • Si debe hacer los cambios en el registro
  • Los archivos contenidos en el paquete de hotfix

Síntomas

En Microsoft SQL Server 2005, puede aparecer un mensaje de error de infracción de acceso cuando se cumplen las condiciones siguientes:
  • Crear un índice que utiliza la opción IGNORE_DUP_KEY para una tabla.
  • Ejecutar una instrucción INSERT que inserta una nueva fila en este índice.
  • El plan para la instrucción INSERT es paralelo.
  • El valor de una de las columnas de clave de la opción IGNORE_DUP_KEY se proporciona mediante un parámetro.
Además, puede recibir un mensaje de error similar al siguiente:
Se ha producido un error de servidor en el comando actual. Los resultados, si los hay, deben descartarse.

Solución

Información de la revisión

Hay un hotfix soportado disponible de Microsoft. Sin embargo, esta revisión se diseñó únicamente para corregir el problema descrito en este artículo. Aplicar esta revisión sólo a los sistemas que experimenten este problema específico. Esta revisión podría ser sometida a comprobaciones adicionales. Por lo tanto, si no se ve muy afectado por este problema, recomendamos que espere a la próxima actualización de software que contenga esta revisión.

Si la revisión está disponible para su descarga, hay una sección de "Descarga de la revisión disponible" en la parte superior de este artículo de Knowledge Base. Si esta sección no aparece, póngase en contacto con servicio al cliente de Microsoft y soporte técnico para obtener la revisión.

Nota Si se producen problemas adicionales o si necesita solucionar un problema, es posible que deba crear una solicitud de servicio independiente. Los costos habituales de soporte se aplicarán a las preguntas de soporte técnico adicionales y problemas que no guarden relación con esta revisión en cuestión. Para obtener una lista completa de los números de teléfono de soporte técnico y servicio al cliente de Microsoft o para crear una solicitud de servicio independiente, visite el siguiente sitio Web de Microsoft:
http://support.Microsoft.com/contactus/?ws=support
Nota El formulario de "Descarga de revisión disponible" muestra los idiomas para los que la revisión está disponible. Si no ve su idioma, es porque una revisión no está disponible para ese idioma.

Requisitos previos

No hay ningún requisito previo para esta revisión.

Información de reinicio

No es necesario que reinicie el equipo después de aplicar esta revisión.

Información del registro

No es necesario cambiar el registro.

Información de archivo

Este hotfix contiene sólo los archivos necesarios para corregir los problemas que se enumera en este artículo. Esta revisión no puede contener todos los archivos necesarios para actualizar plenamente un producto a la compilación más reciente.

La versión en inglés de esta revisión tiene los atributos de archivo (o atributos del archivo más reciente) mostrados en la tabla siguiente. Las fechas y horas de estos archivos se muestran en la hora Universal coordinada (UTC). Cuando vea la información de archivo, se convierte en hora local. Para ver la diferencia entre la hora UTC y la hora local, utilice la ficha Zona horaria en el elemento Fecha y hora en el Panel de Control.
SQL Server 2005 para sistemas basados en x 86
Contraer esta tablaAmpliar esta tabla
Nombre de archivoVersión del archivoTamaño de archivoFechaHoraPlataforma
Msvcp80.dll8.0.50727.42548,86414 de octubre de 200506:26x 86
Msvcr80.dll8.0.50727.42626,68814 de octubre de 200506:26x 86
Sqldiscoveryapi.dll2005.90.1518.0527,06421 de enero de 200611:00x 86
Edición de SQL Server 2005 x 64
Contraer esta tablaAmpliar esta tabla
Nombre de archivoVersión del archivoTamaño de archivoFechaHoraPlataforma
Msvcp80.dll8.0.50727.421,097,72814 de octubre de 200518: 46x 64
Msvcr80.dll8.0.50727.42822,78414 de octubre de 200518: 46x 64
Sqldiscoveryapi.dll2005.90.1518.0745,68821 de enero de 200604:14x 64
SQL Server 2005 para sistemas basados en Itanium
Contraer esta tablaAmpliar esta tabla
Nombre de archivoVersión del archivoTamaño de archivoFechaHoraPlataforma
Msvcp80.dll8.0.50727.421,385,47214 de octubre de 200518:35IA-64
Msvcr80.dll8.0.50727.421,484,80014 de octubre de 200518:35IA-64
Sqldiscoveryapi.dll2005.90.1518.01,924,31221 de enero de 200603:30IA-64

Solución

Para evitar este problema, siga estos pasos:
  1. Determinar la instrucción INSERT problemática que provoca la infracción de acceso.
  2. Forzar el optimizador de consultas para generar un plan serie para la instrucción INSERT problemático. Por lo tanto, la instrucción se ejecutará en un subproceso.
Nota Si no puede determinar la instrucción INSERT problemática que provoca la infracción de acceso, puede utilizar el método que se describe en el método 3 para solucionar este problema.

Para determinar la instrucción INSERT problemática que provoca la infracción de acceso, siga estos pasos:
  1. En el archivo de registro de errores de SQL Server, busque el mensaje de error de infracción de acceso.
  2. Cerca de la parte superior del mensaje de error de infracción de acceso, busque la información del búfer de entrada.
  3. Busque la información de proceso por lotes que sigue a la información del búfer de entrada.

    Nota El lote contiene la instrucción INSERT problemática que provoca la infracción de acceso.
  4. Si el lote contiene sólo una instrucción INSERT, esta instrucción es exactamente la instrucción INSERT problemática. Si el lote contiene varias instrucciones INSERT, realice las operaciones siguientes para determinar la instrucción INSERT problemática:
    1. En SQL Server Profiler, cree una traza en la instancia de SQL Server 2005.
    2. En la categoría de sucesos errores y advertencias , seleccione la clase de evento de atención y la clase de evento de excepción .

      Nota Puede utilizar estas clases de sucesos para determinar la última instrucción que comienza a ejecutarse antes de que se produzca la infracción de acceso.

      Si el lote contiene sólo las instrucciones Transact-SQL, seleccione las siguientes clases de evento adicional en la categoría de sucesos TSQL :
      • SQL: BatchStarting
      • SQL: BatchCompleted
      • SQL: StmtStarting
      • SQL: StmtCompleted
      Si el lote contiene un procedimiento almacenado en el que se produce la infracción de acceso, seleccione las siguientes clases de evento adicional en la categoría de sucesos Procedimientos almacenados :
      • SP: inicio
      • SP: completado
      • SP: StmtStarting
      • StmtCompleted
    3. Ejecutar el mismo lote desde la aplicación cliente.

      Siga este paso para reproducir la infracción de acceso. A continuación, puede determinar la instrucción INSERT problemática. Cuando se ejecuta el proceso por lotes, asegúrese de que la traza se está ejecutando.

      Si la aplicación cliente no es de SQL Server Management Studio, puede ejecutar manualmente el mismo lote en SQL Server Management Studio. Sin embargo, no se puede obtener el mismo plan de ejecución que el plan de ejecución original que causa el problema. Este comportamiento se produce si SQL Server 2005 vuelve a compilar la instrucción INSERT problemática en el lote con un plan de ejecución distinto o con parámetros diferentes.
    4. Detener la traza y, a continuación, analizar los resultados de seguimiento para determinar la instrucción INSERT problemática. Para determinar la instrucción INSERT problemática, determinar el SPID que experimenta la infracción de acceso y que desconecta la aplicación cliente. A continuación, en el SPID, observe la instrucción INSERT que cumple los siguientes requisitos:
      • Se inicia la instrucción INSERT.
      • No se realiza la misma instrucción INSERT.
Para forzar el optimizador de consultas para generar un plan serie para la instrucción INSERT problemático, utilice uno de los métodos siguientes.

Método 1

Nota Utilice este método si se puede tener acceso a la instrucción INSERT problemática.

Agregar la expresión OPTION (MAXDOP 1) a la instrucción INSERT problemática. El siguiente es un ejemplo de la instrucción INSERT nueva.
INSERT INTO MyTable (Col1, Col2)
SELECT Col1, Col2 FROM OtherTable
OPTION (MAXDOP 1) 
Para obtener más información acerca de la sugerencia de consulta MAXDOP, consulte la sección "Uso de MAXDOP" en el siguiente sitio Web de Microsoft Developer Network (MSDN):
http://msdn2.Microsoft.com/en-us/library/ms181714.aspx

Método 2

Nota Utilice este método si no tiene acceso a la instrucción INSERT problemática. Por ejemplo, la instrucción INSERT problemática es desde una aplicación cliente. Sin embargo, no puede volver a configurar la aplicación cliente o no se puede volver a compilar la aplicación cliente para agregar la expresión OPTION (MAXDOP 1) . O bien, la instrucción INSERT problemática es en un procedimiento almacenado. Sin embargo, el procedimiento almacenado está cifrado. No puede modificar las instrucciones en el procedimiento almacenado.

Utilice el procedimiento almacenado sp_create_plan_guide en la instrucción INSERT problemático. Al hacerlo, forzar la expresión OPTION (MAXDOP 1) en la instrucción INSERT problemática. El siguiente es un ejemplo de cómo utilizar el procedimiento almacenado sp_create_plan_guide .
sp_create_plan_guide @name = N'planguide_for_MyFailingProc', -- Arbitrary name
@stmt = N'INSERT INTO MyOneFailingStatementTable VALUES (@a,@b,@c)', -- The problematic INSERT statement
@type = N'OBJECT', @module_or_batch = N'dbo.MyFailingProc', -- The name of the stored procedure that contains the problematic INSERT statement
@params = NULL, @hints = N'OPTION (MAXDOP 1)'-- Query hint to prevent parallelism
Para obtener más información acerca del procedimiento almacenado sp_create_plan_guide , visite el siguiente sitio Web de MSDN:
http://msdn2.Microsoft.com/en-us/library/ms179880.aspx

Método 3

Nota Utilice este método si se cumple alguna de las condiciones siguientes:
  • La instrucción INSERT problemática se genera dinámicamente.
  • No se puede determinar la instrucción INSERT que hace que la infracción de acceso.
Importante: Este método permite que todas las consultas en la instancia de SQL Server 2005 para ejecutarse en un subproceso. No sugerimos que use este método. Este método puede provocar problemas de rendimiento en las otras consultas que se ejecutan en la instancia.

Ejecute las siguientes instrucciones de Transact-SQL.
sp_configure 'show advanced options', 1;
GO

RECONFIGURE WITH OVERRIDE;
GO

sp_configure 'max degree of parallelism', 1;
GO

RECONFIGURE WITH OVERRIDE;
GO
Para obtener más información acerca de la opción de grado máximo de paralelismo , visite el siguiente sitio Web de MSDN:
http://msdn2.Microsoft.com/en-us/library/ms181007.aspx

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Se refiere a:".

Más información

Para obtener más información acerca del esquema de nomenclatura para las actualizaciones de SQL Server, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
822499 Nuevo esquema de nomenclatura para los paquetes de actualización de software de Microsoft SQL Server
Para obtener más información acerca de la terminología de la actualización de software, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
824684 Descripción de la terminología estándar que se utiliza para describir las actualizaciones de software de Microsoft

Propiedades

Id. de artículo: 912885 - Última revisión: lunes, 03 de marzo de 2014 - Versión: 4.0
La información de este artículo se refiere a:
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
Palabras clave: 
kbautohotfix kbsql2005engine kbsql2005presp1fix kbhotfixserver kbfix kbbug kbsqlserv2005fix kbqfe kbmt KB912885 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 912885

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com