Conseils de résolution des problèmes avancés pour la distribution de contenu

Cet article fournit des conseils de dépannage avancés pour vous aider à identifier et à résoudre les problèmes de distribution de contenu.

Version du produit d’origine : Configuration Manager Current Branch, Microsoft System Center 2012 Configuration Manager, Microsoft System Center 2012 R2 Configuration Manager

Activer la journalisation détaillée

  • PkgXferMgr.log

    Pour Package Transfer Manager, la journalisation détaillée fournit plus d’informations dans le journal sur le processus de copie de contenu, les hachages de fichiers et la planification des travaux. La journalisation détaillée peut être activée en définissant la valeur de Registre suivante sur 0 :

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SMS_PACKAGE_TRANSFER_MANAGER\LoggingLevel

    Pour Package Transfer Manager, la journalisation du débogage fournit plus d’informations sur le processus de copie de contenu. La journalisation du débogage peut être activée en définissant la valeur de Registre suivante sur 1 :

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SMS_PACKAGE_TRANSFER_MANAGER\DebugLogging

    Remarque

    Ces modifications de Registre ne nécessitent pas de redémarrage du SMS_Executive service.

  • Journaux client (y compris les journaux d’activité d’extraction et de point de gestion)

    La journalisation détaillée peut être activée en définissant la valeur de Registre suivante sur 0 :

    HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogLevel

    La journalisation du débogage peut être activée en définissant la valeur de Registre suivante comme REG_SZ avec la valeur True :

    HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\DebugLogging\Enabled

    La taille du journal CCM peut être augmentée à 5 M en définissant la valeur de Registre suivante sur 5242880 (décimal)

    HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogMaxSize

    En outre, vous pouvez modifier la valeur DWORD de la valeur de Registre suivante pour augmenter le nombre de fichiers journaux d’historique à conserver :

    HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogMaxHistory

    Remarque

    Ces modifications de registre nécessitent un redémarrage du SMS Agent Host service.

  • StateSys.log

    La journalisation détaillée pour StateSys.log peut être activée en définissant la valeur de Registre suivante sur 1 :

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\COMPONENTS\SMS_STATE_SYSTEM\Verbose logging

    Remarque

    Cette modification de clé de Registre ne nécessite pas de redémarrage du SMS_Executive service.

  • (Global - serveur de site uniquement) Requêtes SQL

    Pour obtenir des informations sur les requêtes SQL exécutées par ConfigMgr les composants, le suivi SQL peut être activé en définissant la valeur de Registre suivante sur 1 :

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SqlEnabled

    Cette valeur de Registre ajoute la journalisation des traces SQL pour tous les journaux d’activité du serveur de site. Cette opération ne doit être effectuée que temporairement lors de la résolution des problèmes et doit être désactivée après l’obtention des journaux pertinents.

    Remarque

    Cette modification du Registre ne nécessite pas de redémarrage du SMS_Executive service.

  • (Global - serveur de site uniquement) Activer l’archivage des journaux

    Il arrive que le problème ne se reproduise pas à la demande et en attendant que le problème se reproduise, il existe un risque de basculement des journaux. Dans ces situations, l’activation de l’archivage des journaux peut être utile, car elle vous permet d’avoir plus de journaux d’historique. Cela s’applique uniquement aux journaux d’activité du serveur de site.

    L’archivage des journaux peut être activé en définissant les valeurs de Registre suivantes :

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\ArchiveEnabled = 1

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

    Après avoir activé l’archivage des journaux, ConfigMgr archivera les journaux d’activité restaurés dans <ArchiveLocation> et conservera 10 copies de chaque journal.

    Pour augmenter le nombre de copies conservées pour un composant spécifique lorsque l’archivage des journaux est activé, définissez la valeur de Registre suivante sur 20 :

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\COMPONENT_NAME\LogMaxHistory

    Remarque

    Ces modifications de registre nécessitent un redémarrage du SMS_Executive service.

  • (Par journal - serveur de site uniquement) Augmenter la taille du fichier journal

    Pour augmenter la taille du fichier journal d’un journal individuel à 50 Mo, définissez la valeur de Registre spécifique au composant sur 52428800 (décimale) :

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\COMPONENT_NAME\MaxFileSize

    Remarque

    Cette modification du Registre nécessite un redémarrage du SMS_Executive service.

Renvoyer une copie compressée d’un package à un site

Lorsqu’un package est distribué pour la première fois à un site, DistMgr envoie une copie compressée du package au site. Une fois le package extrait dans la bibliothèque de contenu sur le site, la copie locale du contenu est utilisée pour envoyer le package aux fournisseurs de services de distribution tant que la même version du package est distribuée aux fournisseurs de données du site.

Dans certains cas, il est nécessaire de forcer un site à renvoyer la copie compressée d’un package à un site spécifié. Plus particulièrement, cela est nécessaire dans les cas suivants :

  1. Le contenu est manquant dans la bibliothèque de contenu (PkgLib, DataLib, ou FileLib) sur un serveur de site principal ou secondaire lui-même.
  2. DistMgr.log se plaint systématiquement que le contenu n’est pas arrivé du site parent (par exemple : « Le contenu du package CS100026 n’est pas encore arrivé du site CS1, réessayera plus tard »).

Dans la plupart des cas, le message « Le contenu du package CS100026 n’est pas encore arrivé du site CS1, réessayera plus tard » est enregistré temporairement pendant que le contenu du package est en transit. Lorsque vous voyez ce message, passez en revue les journaux expéditeur/déspooleur pour vous assurer qu’il n’y a aucun problème avec les communications de site. Consultez Distribuer un package à dp sur plusieurs sites pour comprendre le flux de journal.

Comment DistMgr sait-il si une copie du package est installée sur le site actuel ?

DistMgr vérifie s’il existe une ligne de type 1 dans PkgStatus pour le package pour la version du package en question. S’il existe une ligne de type 1 pour le site avec l’état = Installé, la copie locale du contenu du package est utilisée pour envoyer aux fournisseurs de services. S’il n’y a pas de ligne de type 1 dans PkgStatus, cela signifie que le contenu du package n’est pas encore installé sur le serveur de site.

Redistribuer le package au dp colocalisé sur le serveur de site provoque-t-il la réentation de la copie compressée du package

Non. La redistribution du package repose sur le fait que le site dispose déjà du contenu du package dans le répertoire source du package. Si le package a été envoyé au site à un moment donné et marqué comme Installé, une action de redistribution sur le dp colocalisé sur le serveur de site ne fait rien, car DistMgr pense que le contenu est déjà installé et que la ligne suivante est consignée DistMgr.log :

Le point de distribution se trouve sur le serveur de site et le package est un package de type de contenu. Il n’y a rien à copier.

Que se passe-t-il si le contenu est manquant dans la bibliothèque de contenu sur le site source du package

Si le contenu est manquant dans la bibliothèque de contenu sur le site source du package, la réinitialisation de SourceVersion ne sera pas utile. La seule façon de remplir à nouveau le contenu manquant consiste à mettre à jour le package. La mise à jour du package amène le site source du package à prendre un package instantané à partir de l’emplacement source du package et à écrire le contenu dans la bibliothèque de contenu.

Comment faire forcer le site source du package à renvoyer la copie compressée du package à un site spécifique

Après avoir vérifié que le site source du package possède le contenu requis, il est possible de forcer le site source du package à renvoyer le fichier PCK du package à un site spécifique en définissant SourceVersion sur 0 pour la ligne Type 1 dans PkgStatus pour le site concerné. Cette ligne peut être identifiée en exécutant la requête SQL suivante sur la base de données du site source du package après avoir remplacé les PACKAGEID et SITECODE du package et du site souhaités :

SELECT * FROM PkgStatus WHERE Type = 1 AND ID = 'PACKAGEID' AND SiteCode = 'SITECODE'

Après avoir vérifié que cette requête retourne une ligne unique et correcte, l’exécution de la requête ci-dessous est réinitialisée SourceVersion pour cette ligne à 0 :

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

Après avoir réinitialisé la SourceVersion valeur 0 pour la ligne Type 1, la redistribution du package à n’importe quel dp dans le site affecté force le site source du package à renvoyer la copie compressée du package au site affecté.

Remarque

Il est très important d’exécuter la requête ci-dessus sur le site propriétaire du package, c’est-à-dire le site source du package.

Tables pertinentes pour la distribution de contenu

  • SMSPackages - Contient une liste de tous les packages

    Colonnes intéressantes :

    Column Values
    Action 0 - AUCUN
    1 - MISE À JOUR
    2 - AJOUTER
    3 - DELETE
    4 - VALIDER
    5 - ANNULER
    PackageType 0 - Package standard
    3 - Package de pilotes
    4 - Séquence de tâches
    5 - Package Mises à jour logiciel
    6 - Package paramètres de l’appareil
    7 - Package d’application virtuelle
    8 - Package de contenu (application)
    257 - Image du système d’exploitation
    258 - Image de démarrage
    259 - Package d’installation du système d’exploitation
    260 - Package de disque dur virtuel
  • PkgServers - Contient une liste de tous les packages, ainsi que les fournisseurs de données auxquels ils sont actuellement destinés.

    Colonnes intéressantes :

    Column Values
    Action 0 - AUCUN
    1 - MISE À JOUR
    2 - AJOUTER
    3 - DELETE
    4 - VALIDER
    5 - ANNULER
  • PkgStatus- Contient la liste des status de package actuels pour chaque package pour chaque dp.

    Colonnes intéressantes :

    Column Values
    Type 1 - SITE (MAÎTRE)
    2 - DP (COPY)

    Les lignes de type 1 sont créées pour chaque site ciblé par le package. PkgServer pour cette ligne est le nom de domaine complet du serveur de site.

    Les lignes de type 2 sont créées pour chaque dp auquel le package est ciblé. PkgServer est le DP NALPATH.
    Statut 0 - AUCUN
    1 - ENVOYÉ
    2 - REÇU
    3 - INSTALLÉ
    4 - RÉESSAYER
    5 - ÉCHEC
    6 - SUPPRIMÉ
    7 - SUPPRESSION EN ATTENTE (non utilisé)
    8 - ÉCHEC DE LA SUPPRESSION
    9 - NOUVELLE TENTATIVE DE SUPPRESSION
  • DistributionJobs - Contient une liste des travaux du Gestionnaire de transfert de package avec leur état actuel.

    Colonnes intéressantes :

    Column Values
    Action 0 - AUCUN
    1 - MISE À JOUR
    2 - AJOUTER
    3 - DELETE
    4 - VALIDER
    5 - ANNULER
    État 0 - EN ATTENTE
    1 - PRÊT
    2 - DÉMARRÉ
    3 - INPROGRESS
    4 - REDÉMARRAGE EN ATTENTE
    5 - TERMINÉ
    6 - ÉCHEC
    7 - ANNULÉ
    8 - SUSPENDU
  • DistributionPoints - Contient une liste de tous les points de distribution.

    Colonnes intéressantes :

    Column Values
    Action 0 - AUCUN
    1 - MISE À JOUR
    2 - AJOUTER
    3 - DELETE
    4 - VALIDER
    5 - ANNULER
  • PullDPResponse- Contient temporairement le package status réponse envoyée par les fournisseurs de données d’extraction. DistMgr traite la réponse et met à jour PkgStatus.

    Colonnes intéressantes :

    Column Values
    ActionState 1 - RÉUSSITE
    2 - AVERTISSEMENT
    4 - ERREUR
    8 - TÉLÉCHARGEMENT DÉMARRÉ
    16 - TÉLÉCHARGEMENT EN COURS
    32 - TÉLÉCHARGÉ
    64 - ANNULÉ
    128 - ANNULATION DEMANDÉE
  • PkgNotification - Table de notification surveillée par SMSDBMON pour déclencher DistMgr pour traiter un package. La colonne Type définit le type de notification de package. Les lignes de cette table sont supprimées après que SMSDBMON a déclenché DistMgr.

    Colonnes intéressantes :

    Column Values
    Type 0 - INCONNU
    1 - PACKAGE
    2 - PROGRAMME
    4 - SERVEUR DE PACKAGE (DP)
    8 - COMPTE D’ACCÈS AU PACKAGE
    15 - TOUS
  • Extraire des messages d’état DP : liste des ID de message d’état déclenchés par pull DP

    Colonnes intéressantes :

    Column Values
    State ID 1 - RÉUSSITE
    2 - AVERTISSEMENT
    4 - ÉCHEC
    8 - TÉLÉCHARGEMENT DÉMARRÉ
    16 - TÉLÉCHARGEMENT EN COURS
    32 - TÉLÉCHARGÉ
    64 - ANNULÉ

    Exemple de rapport de message d’état :

        <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>
    

Requêtes SQL utiles

Voici quelques requêtes SQL qui peuvent être utiles lors de la résolution de divers problèmes liés à la distribution de contenu.

Requêtes de status de package/dp

  • Tous les packages/fournisseurs ayant échoué

    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
    
  • Tous les packages/fournisseurs de services en cours

    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
    
  • Tous les packages/fournisseurs de solutions de réussite

    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
    
  • Tous les packages/fournisseurs de services en cours pendant plus de trois jours

    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
    
  • Tous les packages/fournisseurs de services en état d’échec pendant plus de trois jours

    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
    
  • Nombre de tous les états

    SELECT MessageState,
    COUNT(MessageState) AS [Count]
    FROM vSMS_DPStatusDetails
    WHERE PackageID <> ''
    GROUP BY MessageState
    
  • Nombre d’états de package par 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
    
  • État de toutes les adresses DPS pour un package donné

    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
    
  • Nombre d’états dp par package

    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
    
  • État actuel du 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>'
    

Recherche de références dp orphelines

La requête ci-dessous peut être utilisée pour déterminer s’il reste des lignes orphelines dans la base de données pour un DP qui n’est plus dans l’environnement. Il peut y avoir des lignes orphelines si le dp n’a pas été supprimé correctement.

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

Requête similaire pour un DP spécifique dans un site spécifique :

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

Propriétés du fichier de contrôle de site (SCF)

  • Propriétés SCF pour DistMgr pour le site actuel

    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'
    
  • Propriétés SCF d’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'
    

Packages contenant la mise à jour logicielle spécifiée

Répertorie tous les packages contenant l’ID unique de mise à jour donné.

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>'