Sugerencias avanzadas de solución de problemas para la distribución de contenido
En este artículo se proporcionan algunas sugerencias de solución de problemas avanzadas que le ayudarán a identificar y resolver problemas de distribución de contenido.
Versión original del producto: rama actual de Configuration Manager, Microsoft System Center 2012 Configuration Manager, Microsoft System Center 2012 R2 Configuration Manager
Habilitación del registro detallado
PkgXferMgr.log
Para el Administrador de transferencia de paquetes, el registro detallado proporciona más información en el registro sobre el proceso de copia de contenido, los hashes de archivos y la programación de trabajos. El registro detallado se puede habilitar estableciendo el siguiente valor del Registro en 0:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SMS_PACKAGE_TRANSFER_MANAGER\LoggingLevel
Para el Administrador de transferencia de paquetes, el registro de depuración proporciona más información sobre el proceso de copia de contenido. El registro de depuración se puede habilitar estableciendo el siguiente valor del Registro en 1:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SMS_PACKAGE_TRANSFER_MANAGER\DebugLogging
Nota:
Estos cambios del Registro no requieren un reinicio del
SMS_Executive
servicio.Registros de cliente (incluye registros de punto de administración y dp de extracción)
El registro detallado se puede habilitar estableciendo el siguiente valor del Registro en 0:
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogLevel
El registro de depuración se puede habilitar estableciendo el siguiente valor del Registro como REG_SZ con el valor True:
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\DebugLogging\Enabled
El tamaño del registro de CCM se puede aumentar a 5M estableciendo el siguiente valor del Registro en 5242880 (decimal)
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogMaxSize
Además, puede editar el valor DWORD del siguiente valor del Registro para aumentar el número de archivos de registro del historial que se van a conservar:
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogMaxHistory
Nota:
Estos cambios del Registro requieren un reinicio del
SMS Agent Host
servicio.StateSys.log
El registro detallado para StateSys.log se puede habilitar estableciendo el siguiente valor del Registro en 1:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\COMPONENTS\SMS_STATE_SYSTEM\Verbose logging
Nota:
Este cambio de clave del Registro no requiere un reinicio del
SMS_Executive
servicio.(Global: solo servidor de sitio) Consultas SQL
Para obtener información sobre las consultas SQL ejecutadas por
ConfigMgr
componentes, el seguimiento de SQL se puede habilitar estableciendo el siguiente valor del Registro en 1:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SqlEnabled
Este valor del Registro agrega el registro de seguimiento de SQL para todos los registros del servidor de sitio. Esto solo debe realizarse temporalmente durante la solución de problemas y debe deshabilitarse después de obtener los registros pertinentes.
Nota:
Este cambio del Registro no requiere un reinicio del
SMS_Executive
servicio.(Global: solo servidor de sitio) Habilitación del archivado de registros
Hay ocasiones en las que el problema no se reproduce a petición y mientras espera a que el problema se reproduzca, existe el riesgo de que los registros se reproduzcan. En estas situaciones, habilitar el archivado de registros puede ser útil, ya que permite tener registros más históricos. Esto solo es relevante para los registros del servidor de sitio.
El archivado de registros se puede habilitar estableciendo los siguientes valores del Registro:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\ArchiveEnabled
= 1HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\ArchivePath
= <ArchiveLocation>Después de habilitar el archivado de registros, ConfigMgr archivará los registros inscritos en <ArchiveLocation> y conservará 10 copias de cada registro.
Para aumentar el número de copias mantenidas para un componente específico cuando está habilitado el archivado de registros, establezca el siguiente valor del Registro en 20:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\COMPONENT_NAME\LogMaxHistory
Nota:
Estos cambios del Registro requieren un reinicio del
SMS_Executive
servicio.(Por registro: solo servidor de sitio) Aumento del tamaño del archivo de registro
Para aumentar el tamaño del archivo de registro de un registro individual a 50 MB, establezca el valor del Registro específico del componente en 52428800 (decimal):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\COMPONENT_NAME\MaxFileSize
Nota:
Este cambio del Registro requiere un reinicio del
SMS_Executive
servicio.
Volver a enviar una copia comprimida de un paquete a un sitio
Cuando un paquete se distribuye por primera vez a un sitio, DistMgr envía una copia comprimida del paquete al sitio. Después de extraer el paquete en la biblioteca de contenido del sitio, la copia local del contenido se usa para enviar el paquete a direcciones IP siempre que la misma versión del paquete se distribuya a los DP del sitio.
Hay algunas ocasiones en las que es necesario forzar que un sitio vuelva a enviar la copia comprimida de un paquete a un sitio especificado. En particular, esto es necesario cuando:
- Falta contenido de la biblioteca de contenido (
PkgLib
,DataLib
oFileLib
) en un propio servidor de sitio primario o secundario. - DistMgr.log se queja constantemente del contenido que no ha llegado desde el sitio primario (por ejemplo: "El contenido del paquete CS100026 aún no ha llegado del sitio CS1, volverá a intentarlo más adelante").
En la mayoría de los casos, el mensaje "El contenido del paquete CS100026 aún no ha llegado del sitio CS1, volverá a intentarlo más tarde" se registra temporalmente mientras el contenido del paquete está en tránsito. Cuando vea este mensaje, revise los registros sender/despooler para asegurarse de que no hay ningún problema con las comunicaciones del sitio. Revise Distribuir un paquete a DP entre sitios para comprender el flujo de registro.
¿Cómo sabe DistMgr si el sitio actual tiene instalada una copia del paquete?
DistMgr comprueba si hay una fila de tipo 1 en PkgStatus
para el paquete de la versión del paquete en cuestión. Si hay una fila de tipo 1 para el sitio con Estado = instalado, la copia local del contenido del paquete se usa para enviar a los PROVEEDORES. Si no hay ninguna fila de tipo 1 en PkgStatus
, significa que el contenido del paquete aún no está instalado en el servidor de sitio.
Redistribuye el paquete a DP colocado en el servidor de sitio, lo que hace que la copia comprimida del paquete se vuelva a enviar.
No. Redistribuir el paquete se basa en el sitio que ya tiene el contenido del paquete en el directorio de origen del paquete. Si el paquete se envió al sitio en algún momento y se marcó como Instalado, una acción redistribuir en el DP colocado en el servidor de sitio no hace nada como DistMgr cree que el contenido ya está instalado y la siguiente línea se registrará en DistMgr.log:
El punto de distribución está en el servidor de sitio y el paquete es un paquete de tipo de contenido. No hay nada que copiar.
¿Qué ocurre si falta el contenido en la biblioteca de contenido del sitio de origen del paquete?
Si falta el contenido en la biblioteca de contenido del sitio de origen del paquete, el restablecimiento SourceVersion
no ayudará. La única manera de volver a rellenar el contenido que falta es actualizar el paquete. La actualización del paquete hace que el sitio de origen del paquete tome una instantánea del paquete desde la ubicación del origen del paquete y escriba el contenido en la biblioteca de contenido.
Cómo forzar que el sitio de origen del paquete vuelva a enviar la copia comprimida del paquete a un sitio específico.
Después de confirmar que el sitio de origen del paquete tiene el contenido necesario, es posible forzar que el sitio de origen del paquete vuelva a enviar el archivo PCK del paquete a un sitio específico estableciendo SourceVersion
en 0 para la fila de tipo 1 en PkgStatus
para el sitio afectado. Esta fila se puede identificar ejecutando la siguiente consulta SQL en la base de datos del sitio de origen del paquete después de reemplazar packageID y SITECODE del paquete y el sitio deseados:
SELECT * FROM PkgStatus WHERE Type = 1 AND ID = 'PACKAGEID' AND SiteCode = 'SITECODE'
Después de confirmar que esta consulta devuelve una fila única y correcta, la ejecución de la consulta siguiente se restablecerá SourceVersion
para esta fila a 0:
UPDATE PkgStatus SET SourceVersion = 0 WHERE Type = 1 AND ID = 'PACKAGEID' AND SiteCode = 'SITECODE'
Después de restablecer a SourceVersion
0 para la fila tipo 1, redistribuir el paquete a cualquier DP del sitio afectado obligará al sitio de origen del paquete a reenviar la copia comprimida del paquete al sitio afectado.
Nota:
Es muy importante ejecutar la consulta anterior en el sitio que posee el paquete, es decir, el sitio de origen del paquete.
Tablas relevantes para la distribución de contenido
SMSPackages
: contiene una lista de todos los paquetes.Columnas interesantes:
Columna Valores Acción 0: ninguno
1 - ACTUALIZACIÓN
2 - AGREGAR
3 - DELETE
4 - VALIDAR
5 - CANCELARPackageType 0 - Paquete normal
3 - Paquete de controladores
4 - Secuencia de tareas
5 - Paquete de actualizaciones de software
6 - Paquete de configuración del dispositivo
7 - Paquete de aplicación virtual
8 - Paquete de contenido (aplicación)
257 - Imagen del sistema operativo
258 - Imagen de arranque
259- Paquete de instalación del sistema operativo
260- Paquete VHDPkgServers
- Contiene una lista de todos los paquetes junto con los DP a los que están destinados actualmente.Columnas interesantes:
Columna Valores Acción 0: ninguno
1 - ACTUALIZACIÓN
2 - AGREGAR
3 - DELETE
4 - VALIDAR
5 - CANCELARPkgStatus
- Contiene una lista del estado actual del paquete para cada paquete para cada DP.Columnas interesantes:
Columna Valores Tipo 1 - SITIO (MAESTRO)
2 - DP (COPY)
Se crean filas de tipo 1 para cada sitio al que se dirige el paquete. PkgServer para esta fila es el FQDN del servidor de sitio.
Se crean filas de tipo 2 para cada DP a la que se dirige el paquete. PkgServer es el NALPATH de DP.Estado 0: ninguno
1 - ENVIADO
2 - RECIBIDO
3 - INSTALADO
4 - REINTENTO
5 - ERROR
6 - QUITADO
7 - PENDING REMOVE (no se usa)
8 - ERROR DE ELIMINACIÓN
9- REINTENTAR REMOVEDistributionJobs
- Contiene una lista de trabajos del Administrador de transferencia de paquetes junto con su estado actual.Columnas interesantes:
Columna Valores Acción 0: ninguno
1 - ACTUALIZACIÓN
2 - AGREGAR
3 - DELETE
4 - VALIDAR
5 - CANCELARState 0 - PENDIENTE
1 - LISTO
2 - INICIADO
3 - INPROGRESS
4 - REINICIO PENDIENTE
5 - COMPLETADO
6 - ERROR
7 - CANCELADO
8 - SUSPENDIDODistributionPoints
- Contiene una lista de todos los puntos de distribución.Columnas interesantes:
Columna Valores Acción 0: ninguno
1 - ACTUALIZACIÓN
2 - AGREGAR
3 - DELETE
4 - VALIDAR
5 - CANCELARPullDPResponse
- Contiene temporalmente la respuesta de estado del paquete enviada desde los DP de extracción. DistMgr procesa la respuesta y actualizaPkgStatus
.Columnas interesantes:
Columna Valores ActionState 1 - CORRECTO
2 - ADVERTENCIA
4 - ERROR
8 - DESCARGA INICIADA
16 - DESCARGA EN CURSO
32 - DESCARGADO
64 - CANCELADO
128 - CANCELACIÓN SOLICITADAPkgNotification
- Tabla de notificaciones supervisada por SMSDBMON para desencadenar DistMgr para procesar un paquete. La columna De tipo define el tipo de notificación de paquete. Las filas de esta tabla se quitan después de que SMSDBMON desencadene DistMgr.Columnas interesantes:
Columna Valores Tipo 0 - DESCONOCIDO
1 - PAQUETE
2 - PROGRAMA
4 - SERVIDOR DE PAQUETES (DP)
8 - CUENTA DE ACCESO DE PAQUETE
15 - TODOSMensajes de estado de DP de extracción: lista de identificadores de mensajes de estado generados por dp de extracción
Columnas interesantes:
Columna Valores Id. de estado 1 - CORRECTO
2 - ADVERTENCIA
4 - ERROR
8 - DESCARGA INICIADA
16 - DESCARGA EN CURSO
32 - DESCARGADO
64 - CANCELADOInforme de mensajes de estado de ejemplo:
<Report> <ReportHeader> <Identification> <Machine> <ClientInstalled>0</ClientInstalled> <ClientType>1</ClientType> <Unknown>0</Unknown> <ClientID IDType="0" IDFlag="1">925b0ab0-247b-466b-be0f-93d7cb032c87</ClientID> <ClientVersion>5.00.0000.0000</ClientVersion> <NetBIOSName>P01PDP1.CONTOSO.COM</NetBIOSName> <CodePage>437</CodePage> <SystemDefaultLCID>1033</SystemDefaultLCID> </Machine> </Identification> <ReportDetails> <ReportContent>StateMessage</ReportContent> <ReportType>Full</ReportType> <Date>20190107200618.000000+000</Date> <Version>1.0</Version> <Format>1.1</Format> </ReportDetails> </ReportHeader> <ReportBody> <StateMessage MessageTime="20190107200618.000000+000" SerialNumber="3"> <Topic ID="P010000F" Type="902" IDType="0"/> <State ID="1" Criticality="0"/> <UserParameters Flags="0" Count="4"> <Param>P010000F</Param> <Param>["Display=\\P01PDP1.CONTOSO.COM\"]MSWNET:["SMS_SITE=P01"]\\P01PDP1.CONTOSO.COM\</Param> <Param>{04AD1BB3-5E54-457A-9873-DFB2E8035090}</Param> <Param/> </UserParameters> </StateMessage> </ReportBody> </Report>
Consultas SQL útiles
Estas son algunas consultas SQL que pueden resultar útiles al solucionar varios problemas relacionados con la distribución de contenido.
Consultas de estado de Paquete/DP
Todos los paquetes o direcciones IP con errores
SELECT distinct DPSD.DPName, DPSD.PackageID, SP.Name, DPSD.MessageState, DPSD.LastStatusTime, DPSD.SiteCode FROM vSMS_DPStatusDetails DPSD JOIN SMSPackages_All SP ON DPSD.PackageID = SP.PkgID WHERE MessageState = 4
Todos los paquetes en curso /DP
SELECT distinct DPSD.DPName, DPSD.PackageID, SP.Name, DPSD.MessageState, DPSD.LastStatusTime, DPSD.SiteCode FROM vSMS_DPStatusDetails DPSD JOIN SMSPackages_All SP ON DPSD.PackageID = SP.PkgID WHERE MessageState = 2
Todos los paquetes o DIRECCIONES IP correctos
SELECT distinct DPSD.DPName, DPSD.PackageID, SP.Name, DPSD.MessageState, DPSD.LastStatusTime, DPSD.SiteCode FROM vSMS_DPStatusDetails DPSD JOIN SMSPackages_All SP ON DPSD.PackageID = SP.PkgID WHERE MessageState = 1
Todos los paquetes/DP en estado En curso durante más de tres días
SELECT distinct DPSD.DPName, DPSD.PackageID, SP.Name, DPSD.MessageState, DPSD.LastStatusTime, DPSD.SiteCode FROM vSMS_DPStatusDetails DPSD JOIN SMSPackages_All SP ON DPSD.PackageID = SP.PkgID WHERE DPSD.LastStatusTime < DATEAdd(dd,-3,GETDate()) AND MessageState = 2
Todos los paquetes/DP en estado de error durante más de tres días
SELECT distinct DPSD.DPName, DPSD.PackageID, SP.Name, DPSD.MessageState, DPSD.LastStatusTime, DPSD.SiteCode FROM vSMS_DPStatusDetails DPSD JOIN SMSPackages_All SP ON DPSD.PackageID = SP.PkgID WHERE DPSD.LastStatusTime < DATEAdd(dd,-3,GETDate()) AND MessageState = 4
Recuento de todos los estados
SELECT MessageState, COUNT(MessageState) AS [Count] FROM vSMS_DPStatusDetails WHERE PackageID <> '' GROUP BY MessageState
Recuentos de estados de paquete por DP
SELECT DPName, CASE WHEN MessageState = 1 THEN 'Success' WHEN MessageState = 2 THEN 'InProgress' WHEN MessageState = 4 THEN 'Failed' END AS [State], COUNT(MessageState) AS [Count] FROM vSMS_DPStatusDetails WHERE PackageID <> '' AND DPName = 'PS1DP1.CONTOSO.COM' GROUP BY DPName, MessageState ORDER BY DPName
Estado de todos los DP para un paquete determinado
SELECT DPName, CASE WHEN MessageState = 1 THEN 'Success' WHEN MessageState = 2 THEN 'InProgress' WHEN MessageState = 4 THEN 'Failed' END AS [State] FROM vSMS_DPStatusDetails WHERE PackageID = '<PackageID>' GROUP BY DPName, MessageState ORDER BY State
Recuento de estados de DP por paquete
SELECT CASE WHEN MessageState = 1 THEN 'Success' WHEN MessageState = 2 THEN 'InProgress' WHEN MessageState = 4 THEN 'Failed' END AS [State], COUNT(MessageState) AS [Count] FROM vSMS_DPStatusDetails WHERE PackageID = '<PackageID>' GROUP BY MessageState
Estado actual de Package/DP
SELECT distinct DPSD.DPName, DPSD.PackageID, SP.Name, DPSD.LastStatusTime, DPSD.SiteCode, DPSD.MessageState, CASE WHEN MessageState = 1 THEN 'Success' WHEN MessageState = 2 THEN 'InProgress' WHEN MessageState = 4 THEN 'Failed' END AS [State] FROM vSMS_DPStatusDetails DPSD JOIN SMSPackages_All SP ON DPSD.PackageID = SP.PkgID WHERE DPName = 'PS1DP1.CONTOSO.COM' AND DPSD.PackageID = '<PackageID>'
Búsqueda de referencias de DP huérfanas
La consulta siguiente se puede usar para identificar si quedan filas huérfanas en la base de datos para un DP que ya no está en el entorno. Podría haber filas huérfanas si el DP no se quitó correctamente.
DECLARE @DPName NVARCHAR(100)
SET @DPName = 'PS1DP.CONTOSO.COM'
SELECT * FROM ContentDPMap WHERE ServerName = @DPName
SELECT * FROM DistributionPoints WHERE ServerName = @DPName
SELECT * FROM DPInfo WHERE ServerName = @DPName
SELECT * FROM PkgServers_G WHERE NALPath like '%' + @DPName + '%'
SELECT * FROM PkgServers_L WHERE NALPath like '%' + @DPName + '%'
SELECT * FROM PkgStatus_G WHERE PkgServer like '%' + @DPName + '%'
SELECT * FROM PkgStatus_L WHERE PkgServer like '%' + @DPName + '%'
SELECT * FROM SysResList WHERE RoleName = 'SMS Distribution Point' AND ServerName = @DPName
SELECT * FROM SC_SysResUse WHERE NALPath like '%' + @DPName + '%' AND RoleTypeID = 3
Consulta similar para un DP específico en un sitio específico:
DECLARE @DPName NVARCHAR(100)
DECLARE @DPSiteCode NVARCHAR(3)
SET @DPName = 'DPNAME.CONTOSO.COM'
SET @DPSiteCode = 'PS1'
SELECT * FROM ContentDPMap WHERE ServerName = @DPName AND SiteCode = @DPSiteCode
SELECT * FROM DistributionPoints WHERE ServerName = @DPName AND SMSSiteCode = @DPSiteCode
SELECT * FROM DPInfo WHERE ServerName = @DPName AND SiteCode = @DPSiteCode
SELECT * FROM PkgServers_L WHERE NALPath like '%' + @DPName + '%' AND SiteCode = @DPSiteCode
SELECT * FROM PkgServers_G WHERE NALPath like '%' + @DPName + '%' AND SiteCode = @DPSiteCode
SELECT * FROM PkgStatus_L WHERE PkgServer like '%' + @DPName + '%' AND SiteCode = @DPSiteCode
SELECT * FROM PkgStatus_G WHERE PkgServer like '%' + @DPName + '%' AND SiteCode = @DPSiteCode
SELECT * FROM SysResList WHERE RoleName = 'SMS Distribution Point' AND ServerName = @DPName AND SiteCode = @DPSiteCode
SELECT * FROM SC_SysResUse WHERE NALPath like '%' + @DPName + '%SMS_SITE=' + @DPSiteCode + '%' AND RoleTypeID = 3
Propiedades del archivo de control de sitio (SCF)
Propiedades de SCF para DistMgr para el sitio actual
SELECT SD.SiteCode, SC.ComponentName, SCP.Name, SCP.Value1, SCP.Value2, SCP.Value3 FROM SC_Component SC JOIN SC_SiteDefinition SD ON SD.SiteNumber = SC.SiteNumber JOIN SC_Component_Property SCP ON SCP.ComponentID = SC.ID WHERE SD.SiteCode = dbo.fnGetSiteCode() AND SC.ComponentName = 'SMS_DISTRIBUTION_MANAGER'
Propiedades de SCF para un DP
SELECT SRU.RoleName, SRU.ServerName, SRUP.* FROM vSMS_SC_SysResUse SRU JOIN vSMS_SC_SysResUse_Properties SRUP ON SRU.ID = SRUP.ID WHERE SRU.RoleName = 'SMS Distribution Point' AND SRU.ServerName = 'PS1DP1.CONTOSO.COM'
Paquetes que contienen la actualización de software especificada
Enumere todos los paquetes que contengan el identificador único de actualización especificado.
SELECT distinct UI.ArticleID, CI.CI_UniqueID, CP.PkgID, P.Name FROM v_UpdateInfo UI
JOIN v_ConfigurationItems CI ON UI.CI_ID = CI.CI_ID
JOIN v_CIContents_All CIC ON CI.CI_ID = CIC.CI_ID
JOIN CI_ContentPackages CP ON CP.Content_ID = CIC.Content_ID
JOIN v_Package P ON CP.PkgID = P.PackageID
WHERE CI.CI_UniqueID = '<UniqueID>'