Conseils de dépannage avancés pour la distribution de contenu
Cet article fournit quelques 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
Activez la journalisation commenté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
Note
Ces modifications de Registre ne nécessitent pas de redémarrage du
SMS_Executive
service.Journaux du client (y compris les journaux de point de gestion et dp d’extraction)
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 à 5M 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 pour la valeur de Registre suivante afin d’augmenter le nombre de fichiers journaux d’historique à conserver :
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogMaxHistory
Note
Ces modifications de Registre nécessitent un redémarrage du
SMS Agent Host
service.StateSys.log
La journalisation détaillée des 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
Note
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
des 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 du serveur de site. Cette opération doit être effectuée temporairement lors de la résolution des problèmes et doit être désactivée après avoir obtenu les journaux appropriés.
Note
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 existe des occasions où le problème ne se reproduit pas à la demande et en attendant que le problème se reproduise, il existe un risque de basculement des journaux d’activité. 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 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
= 1HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\ArchivePath
= <ArchiveLocation>Après avoir activé l’archivage des journaux, ConfigMgr archive les journaux roulés dans <ArchiveLocation> et conserve 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
Note
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écimal) :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\COMPONENT_NAME\MaxFileSize
Note
Cette modification du Registre nécessite un redémarrage du
SMS_Executive
service.
Renvoyer une copie compressée d’un package sur un site
Lorsqu’un package est distribué pour la première fois sur un site, DistMgr envoie une copie compressée du package au site. Une fois que le package est 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 à condition que la même version du package soit distribuée aux adresses IP du site.
Il existe quelques occasions où 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 quand :
- Le contenu est manquant dans la bibliothèque de contenu (
PkgLib
ouDataLib
FileLib
) sur un serveur de site principal ou secondaire lui-même. - DistMgr.log se plaint constamment du contenu qui n’est pas arrivé à partir du site parent (par exemple : « Le contenu du package CS100026 n’est pas encore arrivé à partir du site CS1, réessayera plus tard »).
Dans la plupart des cas, le message « Le contenu du package CS100026 n’est pas encore arrivé à partir 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 de l’expéditeur/despooler pour vous assurer qu’il n’y a aucun problème avec les communications de site. Passez en revue Distribuer un package à DP sur plusieurs sites pour comprendre le flux de journal.
Comment DistMgr sait-il si le site actuel a une copie du package installé
DistMgr vérifie s’il existe une ligne PkgStatus
type 1 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 les adresses IP. S’il n’existe aucune ligne PkgStatus
de type 1, cela signifie que le contenu du package n’est pas encore installé sur le serveur de site.
Redistribue-t-il le package à DP colocalisé sur le serveur de site, car la copie compressée du package doit être réentée
Non. La redistribution du package s’appuie sur le site ayant déjà le 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 redistribuée sur le dp colocalisée sur le serveur de site ne fait rien, car DistMgr pense que le contenu est déjà installé et que la ligne suivante sera consignée dans 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 ne SourceVersion
vous aidera pas. La seule façon de remplir le contenu manquant consiste à mettre à jour le package. La mise à jour du package entraîne la prise d’un instantané de package à partir de l’emplacement source du package et l’écriture du 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 confirmé que le site source du package a 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
la valeur 0 pour la ligne PkgStatus
Type 1 du 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é 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 confirmé que cette requête retourne une ligne unique et correcte, l’exécution de la requête ci-dessous réinitialise SourceVersion
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 sur n’importe quel dp du site concerné force le site source du package à renvoyer la copie compressée du package sur le site concerné.
Note
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 packagesColonnes intéressantes :
Colonne Valeurs Action 0 - AUCUN
1 - UPDATE
2 - AJOUTER
3 - DELETE
4 - VALIDER
5 - ANNULERPackageType 0 - Package normal
3 - Package de pilotes
4 - Séquence de tâches
5 - Package de mises à jour logicielles
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 VHDPkgServers
- Contient une liste de tous les packages ainsi que les fournisseurs de services auxquels ils sont actuellement ciblés.Colonnes intéressantes :
Colonne Valeurs Action 0 - AUCUN
1 - UPDATE
2 - AJOUTER
3 - DELETE
4 - VALIDER
5 - ANNULERPkgStatus
- Contient la liste de l’état actuel du package pour chaque package pour chaque dp.Colonnes intéressantes :
Colonne Valeurs Type 1 - SITE (MASTER)
2 - DP (COPY)
Les lignes de type 1 sont créées pour chaque site auquel le package est ciblé. 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.État 0 - AUCUN
1 - ENVOYÉ
2 - REÇU
3 - INSTALLÉ
4 - NOUVELLE TENTATIVE
5 - ÉCHEC
6 - SUPPRIMÉ
7 - EN ATTENTE REMOVE (non utilisé)
8 - ÉCHEC DE LA SUPPRESSION
9 - RETRY REMOVEDistributionJobs
- Contient la liste des travaux du Gestionnaire de transfert de package, ainsi que leur état actuel.Colonnes intéressantes :
Colonne Valeurs Action 0 - AUCUN
1 - UPDATE
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 - SUSPENDUDistributionPoints
- Contient une liste de tous les points de distribution.Colonnes intéressantes :
Colonne Valeurs Action 0 - AUCUN
1 - UPDATE
2 - AJOUTER
3 - DELETE
4 - VALIDER
5 - ANNULERPullDPResponse
- Contient temporairement la réponse d’état du package envoyée à partir des adresses IP d’extraction. DistMgr traite la réponse et les mises à jourPkgStatus
.Colonnes intéressantes :
Colonne Valeurs ActionState 1 - SUCCESS
2 - AVERTISSEMENT
4 - ERREUR
8 - TÉLÉCHARGEMENT DÉMARRÉ
16 - TÉLÉCHARGER EN COURS
32 - TÉLÉCHARGÉ
64 - ANNULÉ
128 - ANNULATION DEMANDÉEPkgNotification
- 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 déclenche DistMgr.Colonnes intéressantes :
Colonne Valeurs Type 0 - INCONNU
1 - PACKAGE
2 - PROGRAMME
4 - PACKAGE SERVER (DP)
8 - COMPTE D’ACCÈS AU PACKAGE
15 - TOUTPull DP state messages - Liste des ID de message d’état déclenchés par pull DP
Colonnes intéressantes :
Colonne Valeurs État ID 1 - SUCCESS
2 - AVERTISSEMENT
4 - ÉCHEC
8 - TÉLÉCHARGEMENT DÉMARRÉ
16 - TÉLÉCHARGER 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 différents problèmes liés à la distribution de contenu.
Requêtes d’état de package/DP
Tous les packages/adresses IP 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/adresses IP 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 de réussite /fournisseurs de services
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/DPS 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/adresses IP 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 tous les fournisseurs de services 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 identifier s’il existe des lignes orphelines laissées 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’une 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>'