Microsoft distribuye las correcciones de Microsoft SQL Server 2008 R2 como un archivo descargable. Dado que las correcciones son acumulativas, cada nueva versión contiene todas las revisiones y todas las correcciones de seguridad que se incluyeron con la versión de corrección de SQL Server 2008 R2 anterior.
Síntomas
Imagine la siguiente situación:
-
Tiene un modelo y una entidad de Master Data Services (MDS) que tiene un atributo basado en dominio en Microsoft SQL Server 2008 R2. El atributo basado en dominio está diseñado para referirse a sí mismo al mismo atributo.Por ejemplo, tiene una entidad Employee que tiene un atributo ManagerName. El atributo ManagerName hace referencia a la misma entidad Employee.Nota Un administrador también es un tipo de empleado.
-
Hay una jerarquía derivada que se define en un atributo para mostrar la relación recursiva primario/secundario para el atributo basado en dominio.
-
Se cargan valores de datos que contienen una o más referencias circulares a la tabla de ensayo MDS. Este comportamiento hace una referencia circular y el primer nodo del atributo no forma parte del círculo.Por ejemplo, el siguiente patrón de datos muestra una referencia circular. Sin embargo, el valor de miembro Miembro1 no forma parte del círculo:
Member1 --manager attribute--> Member2 --manager attribute--> Member3 --manager attribute--> Member2 --manager attribute--> Member3
insert into mdm.tblStgMemberAttribute(ModelName, EntityName, MemberType_ID, MemberCode, AttributeName, AttributeValue, Status_ID)Values ('EntityTest', 'ModelTest', 1, 'Member3', 'Manager', 'Member2', 0),('EntityTest', 'ModelTest', 1, 'Member2', 'Manager', 'Member3', 0),('EntityTest', 'ModelTest', 1, 'Member3', 'Manager', 'Member2', 0),('EntityTest', 'ModelTest', 1, 'Member2', 'Manager', 'Member1', 0)('EntityTest', 'ModelTest', 1, 'Member1', 'Manager', 'NULL', 0)
-
Use uno de los siguientes métodos para cargar valores de datos en la entidad mediante el proceso de ensayo MDS:
-
Ejecuta el Exec [mdm]. [udpStagingSweep] procedimiento mediante el uso de los parámetros necesarios para procesar los datos preconfigurados.
-
Haz clic en Administración de integración para visitar la página principal del sitio web de MDS. En la página Importar exportación , en el encabezado de la sección Registros de ensayo no sincronizados , haga clic en el icono de engranaje para procesar los registros para un modelo y una versión determinados.
-
En este escenario, el proceso en segundo plano durante el proceso de ensayo puede encontrar un bucle infinito cuando el proceso en segundo plano llama internamente al [mdm]. [udpMemberRecursiveCircularCheck] procedimiento.
Causa
Este problema se produce porque los procedimientos udpStagingSweep y udpStagingMemberAttributeSave llaman al procedimiento udpMemberRecursiveCircularCheck una vez por cada fila de ensayo. Este comportamiento debe comprobar un valor de atributo basado en dominio y devuelve un error si la fila de ensayo hace una referencia circular junto con los datos existentes. Después de comprobar todas las filas de ensayo, recibirá los siguientes resultados:
-
Se aplican las filas de ensayo sin errores.
-
Las filas de ensayo con errores se anotan con un código de error.
Si se cumplen las condiciones descritas en la sección "Síntomas", el [mdm]. El procedimiento [udpMemberRecursiveCircularCheck] se repite indefinidamente hasta que se agotan los recursos del servidor o se produce un tiempo de espera.
Solución
Información sobre la actualización acumulativa
SQL Server 2008 R2 Service Pack 1
La corrección para este problema se publicó por primera vez en la actualización acumulativa 4. Para obtener más información sobre cómo obtener este paquete de actualización acumulativa para SQL Server 2008 R2 SP1, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
2633146 Paquete de actualización acumulativa 4 para SQL Server 2008 R2 Service Pack 1Note Como las compilaciones son acumulativas, cada nueva versión de corrección contiene todas las revisiones y todas las correcciones de seguridad que se incluyeron con la versión anterior de corrección de SQL Server 2008 R2 SP1. Le recomendamos que considere la posibilidad de aplicar la corrección más reciente que contiene esta revisión. Si desea obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
2567616 Las compilaciones de SQL Server 2008 R2 que se publicaron después del lanzamiento de SQL Server 2008 R2 Service Pack 1
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "Se aplica a".
Solución
Para resolver este problema, utilice uno de los métodos siguientes:
-
Para evitar el problema, siga estos pasos:
-
Revise manualmente los valores de datos de miembro que se insertan en la tabla de ensayo antes de ejecutar el proceso de ensayo.
-
Asegúrese de que todos los valores de miembro de cualquier atributo basado en dominio no contengan referencias circulares que se describen en la sección "Síntomas".
-
-
Cuando se produce el problema que se describe en la sección "Síntomas", siga estos pasos para corregir el problema:
-
Identifique la sesión que se ejecuta en el bucle infinito.
-
Mata la sesión para detener el bucle.
-
Elimine los valores de referencia circular de la tabla provisional antes de que se procese de nuevo la referencia circular.
-
Notas
-
Para identificar qué sesión matar, usa uno de los siguientes métodos:
-
Usar un monitor de actividad en Microsoft SQL Server Management Studio.
-
Selecciona entre los sys.sysprocesses o sys.dm_exec_requests vista de administración dinámica (DMV) para identificar las sesiones que están trabajando dentro de la base de datos MDS en las que la CPU y el tiempo se incrementan rápidamente. Asegúrese de que la consulta actual que se está ejecutando en la sesión coincide con los nombres de procedimiento que se describen en la sección "Causa".
-
-
Para identificar el procedimiento actualmente en ejecución para las sesiones, use uno de los métodos siguientes:
-
Haz clic con el botón derecho en el menú Detalles de cada proceso del listado de procesos del monitor de actividad.
-
Use uno de los siguientes parámetros:
-
El comando DBCC INPUTBUFFER (spid) junto con el id. de sesión.
-
La función SELECT * FROM sys.dm_exec_sql_text(sqlhandle) junto con el parámetro de controlador SQL coincidente al usar la salida DMV.
-
-
Referencias
Para obtener más información sobre cómo abrir un monitor de actividad en SQL Server Management Studio, visita el siguiente sitio web de MSDN:
Cómo abrir un monitor de actividad en SQL Server Management StudioPara obtener más información sobre la sintaxis de KILL, visite el siguiente sitio web de MSDN:
Información general sobre la sintaxis de KILLPara obtener más información sobre la sys.dm_exec_requests DMV, visite el siguiente sitio web de MSDN:
Información general sobre el DMV sys.dm_exec_requestsPara obtener más información sobre la sys.dm_exec_sql_text DMV, visite el siguiente sitio web de MSDN:
Información general sobre el DMV sys.dm_exec_sql_textPara obtener más información sobre el comando DBCC INPUTBUFFER, visite el siguiente sitio web de MSDN:
Información general sobre el comando DBCC INPUTBUFFERPara obtener más información sobre el modelo de mantenimiento incremental para SQL Server, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
935897 El equipo de SQL Server dispone de un modelo de mantenimiento incremental para ofrecer revisiones para los problemas notificadosPara obtener más información sobre el 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 sobre terminología de 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 utilizada para describir las actualizaciones de software de Microsoft