Sugerencias avanzadas de solución de problemas para la distribución de contenido

En este artículo se proporcionan algunas sugerencias avanzadas de solución de problemas para ayudarle a identificar y resolver problemas de distribución de contenido.

Versión original del producto: Configuration Manager rama actual, 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 archivo 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 dp de extracción y registros de punto de administració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 5 M 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 se espera a que se reproduzca el problema, existe el riesgo de que los registros se reproduzcan. En estas situaciones, habilitar el archivado de registros puede ser útil, ya que le permite tener más registros 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 = 1

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\ArchivePath = <ArchiveLocation>

    Después de habilitar el archivado de registros, ConfigMgr archivará los registros rescritos en ArchiveLocation <>y conservará 10 copias de cada registro.

    Para aumentar el número de copias mantenidas para un componente específico cuando el archivado de registros está habilitado, 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.

  • (Solo por registro: 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. Una vez extraído el paquete en la biblioteca de contenido del sitio, se usa la copia local del contenido para enviar el paquete a los DPs, siempre y cuando la misma versión del paquete se distribuya a los DP del sitio.

Hay algunas ocasiones en las que es necesario forzar a un sitio a volver a enviar la copia comprimida de un paquete a un sitio especificado. En particular, esto es necesario cuando:

  1. Falta contenido de la biblioteca de contenido (PkgLib, DataLibo FileLib) en un servidor de sitio principal o secundario.
  2. DistMgr.log constantemente se queja de que el contenido no ha llegado del sitio primario (por ejemplo: "El contenido del paquete CS100026 todavía no ha llegado del sitio CS1, volverá a intentarlo más tarde").

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 Distribución de 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, se usa la copia local del contenido del paquete para enviar a los DP. 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.

Redistribuir el paquete a DP colocado en el servidor de sitio hace que la copia comprimida del paquete se resienta

No. La redistribución del paquete se basa en que el sitio 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 de redistribución en el DP colocado en el servidor de sitio no hace nada, ya que DistMgr cree que el contenido ya está instalado y que la siguiente línea se iniciará sesión 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 le 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 de la ubicación de 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 mediante la ejecución de la siguiente consulta SQL en la base de datos del sitio de origen del paquete después de reemplazar el 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 en 0:

UPDATE PkgStatus SET SourceVersion = 0 WHERE Type = 1 AND ID = 'PACKAGEID' AND SiteCode = 'SITECODE'

Después de restablecer a SourceVersion0 para la fila De tipo 1, redistribuir el paquete a cualquier DP en el sitio afectado obligará al sitio de origen del paquete a volver a enviar la copia comprimida del paquete al sitio afectado.

Nota:

Es muy importante ejecutar la consulta anterior en el sitio propietario del paquete, es decir, el sitio de origen del paquete.

Tablas pertinentes para la distribución de contenido

  • SMSPackages - Contiene una lista de todos los paquetes

    Columnas interesantes:

    Column Valores
    Acción 0 - NONE
    1 - ACTUALIZAR
    2 - AGREGAR
    3 - ELIMINAR
    4: VALIDAR
    5 - CANCELAR
    PackageType 0: paquete normal
    3- Paquete de controladores
    4 - Secuencia de tareas
    5 - Paquete de Novedades 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 vhd
  • PkgServers - Contiene una lista de todos los paquetes junto con los DP a los que están destinados actualmente.

    Columnas interesantes:

    Column Valores
    Acción 0 - NONE
    1 - ACTUALIZAR
    2 - AGREGAR
    3 - ELIMINAR
    4: VALIDAR
    5 - CANCELAR
  • PkgStatus - Contiene una lista del estado actual del paquete para cada paquete para cada DP.

    Columnas interesantes:

    Column Valores
    Tipo 1 - SITIO (MAESTRO)
    2 - DP (COPY)

    Se crean filas de tipo 1 para cada sitio al que está destinado el paquete. PkgServer para esta fila es el FQDN del servidor de sitio.

    Se crean filas de tipo 2 para cada DP al que está destinado el paquete. PkgServer es el NALPATH de DP.
    Estado 0 - NONE
    1: ENVIADO
    2 - RECIBIDO
    3: INSTALADO
    4- REINTENTO
    5: ERROR
    6 - QUITADO
    7 - PENDIENTE QUITAR (no se usa)
    8: ERROR AL QUITAR
    9: REINTENTAR QUITAR
  • DistributionJobs - Contiene una lista de trabajos del Administrador de transferencia de paquetes junto con su estado actual.

    Columnas interesantes:

    Column Valores
    Acción 0 - NONE
    1 - ACTUALIZAR
    2 - AGREGAR
    3 - ELIMINAR
    4: VALIDAR
    5 - CANCELAR
    Estado 0 : PENDIENTE
    1 - LISTO
    2: INICIADO
    3 - INPROGRESS
    4 : REINICIO PENDIENTE
    5 - COMPLETO
    6: ERROR
    7 - CANCELADO
    8 - SUSPENDIDO
  • DistributionPoints - Contiene una lista de todos los puntos de distribución.

    Columnas interesantes:

    Column Valores
    Acción 0 - NONE
    1 - ACTUALIZAR
    2 - AGREGAR
    3 - ELIMINAR
    4: VALIDAR
    5 - CANCELAR
  • PullDPResponse - Contiene temporalmente la respuesta de estado del paquete enviada desde los DP de extracción. DistMgr procesa la respuesta y actualiza PkgStatus.

    Columnas interesantes:

    Column Valores
    ActionState 1 - CORRECTO
    2 - ADVERTENCIA
    4 - ERROR
    8: INICIO DE LA DESCARGA
    16 - DESCARGA EN CURSO
    32 - DESCARGADO
    64 - CANCELADO
    128 - CANCELACIÓN SOLICITADA
  • PkgNotification - Tabla de notificaciones supervisada por SMSDBMON para desencadenar DistMgr para procesar un paquete. La columna Type define el tipo de notificación del paquete. Las filas de esta tabla se quitan después de que SMSDBMON desencadene DistMgr.

    Columnas interesantes:

    Column Valores
    Tipo 0 : DESCONOCIDO
    1: PAQUETE
    2 - PROGRAMA
    4 - SERVIDOR DE PAQUETES (DP)
    8- CUENTA DE ACCESO DE PAQUETE
    15 - TODO
  • Extracción de mensajes de estado de DP : lista de identificadores de mensaje de estado generados por la extracción de DP

    Columnas interesantes:

    Column Valores
    Id. de estado 1 - CORRECTO
    2 - ADVERTENCIA
    4 - ERROR
    8: INICIO DE LA DESCARGA
    16 - DESCARGA EN CURSO
    32 - DESCARGADO
    64 - CANCELADO

    Informe de mensaje 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 para solucionar diversos 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 o direcciones IP en curso

    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 DP 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 o direcciones IP 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 o direcciones IP 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 de 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 del paquete/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 de un DP que ya no está en el entorno. Puede 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 contienen 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>'