Suggerimenti avanzati per la risoluzione dei problemi per la distribuzione del contenuto
Questo articolo fornisce alcuni suggerimenti avanzati per la risoluzione dei problemi che consentono di identificare e risolvere i problemi di distribuzione del contenuto.
Versione originale del prodotto: Configuration Manager Current Branch, Microsoft System Center 2012 Configuration Manager, Microsoft System Center 2012 R2 Configuration Manager
Abilitare la registrazione dettagliata
PkgXferMgr.log
Per Package Transfer Manager, la registrazione dettagliata fornisce altre informazioni nel log sul processo di copia del contenuto, sugli hash dei file e sulla pianificazione dei processi. La registrazione dettagliata può essere abilitata impostando il valore del Registro di sistema seguente su 0:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SMS_PACKAGE_TRANSFER_MANAGER\LoggingLevel
Per Package Transfer Manager, la registrazione di debug fornisce altre informazioni sul processo di copia del contenuto. La registrazione di debug può essere abilitata impostando il valore del Registro di sistema seguente su 1:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SMS_PACKAGE_TRANSFER_MANAGER\DebugLogging
Note
Queste modifiche al Registro di sistema non richiedono un riavvio del
SMS_Executive
servizio.Log client (inclusi i log pull del punto di gestione e dping)
La registrazione dettagliata può essere abilitata impostando il valore del Registro di sistema seguente su 0:
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogLevel
La registrazione di debug può essere abilitata impostando il valore del Registro di sistema seguente come REG_SZ con valore True:
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\DebugLogging\Enabled
Le dimensioni del log CCM possono essere aumentate a 5M impostando il valore del Registro di sistema seguente su 5242880 (decimale)
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogMaxSize
Inoltre, è possibile modificare il valore DWORD per il valore del Registro di sistema seguente per aumentare il numero di file di log di cronologia da conservare:
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogMaxHistory
Note
Queste modifiche del Registro di sistema richiedono un riavvio del
SMS Agent Host
servizio.StateSys.log
La registrazione dettagliata per StateSys.log può essere abilitata impostando il valore del Registro di sistema seguente su 1:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\COMPONENTS\SMS_STATE_SYSTEM\Verbose logging
Note
Questa modifica della chiave del Registro di sistema non richiede un riavvio del
SMS_Executive
servizio.(Globale - solo server del sito) Query SQL
Per ottenere informazioni sulle query SQL eseguite dai
ConfigMgr
componenti, è possibile abilitare la traccia SQL impostando il valore del Registro di sistema seguente su 1:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SqlEnabled
Questo valore del Registro di sistema aggiunge la registrazione di traccia SQL per tutti i log del server del sito. Questa operazione deve essere eseguita solo temporaneamente durante la risoluzione dei problemi e deve essere disabilitata dopo aver ottenuto i log pertinenti.
Note
Questa modifica del Registro di sistema non richiede un riavvio del
SMS_Executive
servizio.(Globale - solo server del sito) Abilitare l'archiviazione dei log
In alcuni casi il problema non viene riprodotto su richiesta e durante l'attesa che il problema venga riprodotto, si rischia di eseguire il rollover dei log. In queste situazioni, l'abilitazione dell'archiviazione dei log può essere utile perché consente di avere più log cronologici. Questo è rilevante solo per i log del server del sito.
L'archiviazione dei log può essere abilitata impostando i valori del Registro di sistema seguenti:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\ArchiveEnabled
= 1HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\ArchivePath
= <ArchiveLocation>Dopo aver abilitato l'archiviazione dei log, ConfigMgr archivierà i log di cui è stato eseguito il <roll over in ArchiveLocation> e manterrà 10 copie di ogni log.
Per aumentare il numero di copie gestite per un componente specifico quando è abilitata l'archiviazione dei log, impostare il valore del Registro di sistema seguente su 20:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\COMPONENT_NAME\LogMaxHistory
Note
Queste modifiche del Registro di sistema richiedono un riavvio del
SMS_Executive
servizio.(Per log - solo server del sito) Aumentare le dimensioni del file di log
Per aumentare le dimensioni del file di log per un singolo log su 50 MB, impostare il valore del Registro di sistema specifico del componente su 52428800 (decimale):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\COMPONENT_NAME\MaxFileSize
Note
Questa modifica del Registro di sistema richiede un riavvio del
SMS_Executive
servizio.
Inviare di nuovo una copia compressa di un pacchetto in un sito
Quando un pacchetto viene distribuito per la prima volta a un sito, DistMgr invia una copia compressa del pacchetto al sito. Dopo l'estrazione del pacchetto nella raccolta contenuto nel sito, la copia locale del contenuto viene usata per inviare il pacchetto ai provider di dominio purché la stessa versione del pacchetto venga distribuita ai provider di dominio nel sito.
In alcuni casi è necessario forzare un sito a inviare nuovamente la copia compressa di un pacchetto a un sito specificato. In particolare, questo è necessario quando:
- Il contenuto non è presente nella raccolta contenuto (
PkgLib
,DataLib
oFileLib
) in un server del sito primario o secondario stesso. - DistMgr.log si lamenta costantemente del contenuto che non è arrivato dal sito padre (ad esempio: "Il contenuto del pacchetto CS100026 non è ancora arrivato dal sito CS1, riprova più tardi".
Nella maggior parte dei casi, il messaggio "Il contenuto del pacchetto CS100026 non è ancora arrivato dal sito CS1, riprova più tardi" viene registrato temporaneamente mentre il contenuto del pacchetto è in transito. Quando viene visualizzato questo messaggio, esaminare i log sender/despooler per assicurarsi che non siano presenti problemi con le comunicazioni del sito. Per informazioni sul flusso di log, vedere Distribuire un pacchetto a Dp in più siti .
In che modo DistMgr sa se nel sito corrente è installata una copia del pacchetto
DistMgr controlla se è presente una riga di tipo 1 in PkgStatus
per il pacchetto per la versione del pacchetto in questione. Se è presente una riga di tipo 1 per il sito con Stato = installato, la copia locale del contenuto del pacchetto viene usata per inviare ai provider di dominio. Se non è presente alcuna riga di tipo 1 in PkgStatus
, significa che il contenuto del pacchetto non è ancora installato nel server del sito.
Esegue la ridistribuzione del pacchetto nel servizio Device Provisioning nel server del sito, in modo che la copia compressa del pacchetto venga reinviata
No. La ridistribuzione del pacchetto si basa sul sito in cui il contenuto del pacchetto è già presente nella directory di origine del pacchetto. Se il pacchetto è stato inviato al sito a un certo punto e contrassegnato come Installato, un'azione di ridistribuzione nel dispositivo di distribuzione sul server del sito non esegue alcuna operazione come DistMgr ritiene che il contenuto sia già installato e che la riga seguente venga registrata DistMgr.log:
Il punto di distribuzione si trova nel server del sito e il pacchetto è un pacchetto di tipo di contenuto. Non c'è niente da copiare.
Cosa accade se il contenuto non è presente nella raccolta contenuto nel sito di origine del pacchetto
Se il contenuto non è presente nella raccolta contenuto nel sito di origine del pacchetto, la reimpostazione SourceVersion
di non sarà più utile. L'unico modo per ripopolare il contenuto mancante consiste nell'aggiornare il pacchetto. L'aggiornamento del pacchetto determina la creazione di uno snapshot del pacchetto dal percorso di origine del pacchetto e la scrittura del contenuto nella raccolta contenuto.
Ricerca per categorie forzare il sito di origine del pacchetto a inviare nuovamente la copia compressa del pacchetto in un sito specifico
Dopo aver confermato che il sito di origine del pacchetto ha il contenuto necessario, è possibile forzare il sito di origine del pacchetto a inviare nuovamente il file PCK del pacchetto a un sito specifico impostando SourceVersion
su 0 per la riga di tipo 1 in PkgStatus
per il sito interessato. Questa riga può essere identificata eseguendo la query SQL seguente nel database del sito di origine del pacchetto dopo aver sostituito PACKAGEID e SITECODE del pacchetto e del sito desiderati:
SELECT * FROM PkgStatus WHERE Type = 1 AND ID = 'PACKAGEID' AND SiteCode = 'SITECODE'
Dopo aver verificato che la query restituisce una riga univoca e corretta, l'esecuzione della query seguente verrà reimpostata SourceVersion
su 0:
UPDATE PkgStatus SET SourceVersion = 0 WHERE Type = 1 AND ID = 'PACKAGEID' AND SiteCode = 'SITECODE'
Dopo aver reimpostato su SourceVersion
0 per la riga tipo 1, la ridistribuzione del pacchetto in qualsiasi dp nel sito interessato forza il sito di origine del pacchetto a inviare nuovamente la copia compressa del pacchetto al sito interessato.
Note
È molto importante eseguire la query precedente nel sito proprietario del pacchetto, ad esempio il sito di origine del pacchetto.
Tabelle pertinenti per la distribuzione del contenuto
SMSPackages
- Contiene un elenco di tutti i pacchettiColonne interessanti:
Colonna Valori Azione 0: nessuno
1 - AGGIORNAMENTO
2 - AGGIUNGI
3 - ELIMINAZIONE
4 - CONVALIDA
5 - ANNULLAPackageType 0 - Pacchetto normale
3 - Pacchetto driver
4 - Sequenza di attività
5 - Pacchetto aggiornamenti software
6 - Pacchetto impostazioni dispositivo
7 - Pacchetto di app virtuali
8 - Pacchetto di contenuto (applicazione)
257 - Immagine del sistema operativo
258 - Immagine d'avvio
259 - Pacchetto di installazione del sistema operativo
260 - Pacchetto VHDPkgServers
: contiene un elenco di tutti i pacchetti insieme ai provider di dominio a cui sono attualmente destinati.Colonne interessanti:
Colonna Valori Azione 0: nessuno
1 - AGGIORNAMENTO
2 - AGGIUNGI
3 - ELIMINAZIONE
4 - CONVALIDA
5 - ANNULLAPkgStatus
- Contiene un elenco dello stato corrente del pacchetto per ogni pacchetto per ogni dp.Colonne interessanti:
Colonna Valori Type 1 - SITO (MASTER)
2 - DP (COPY)
Vengono create righe di tipo 1 per ogni sito a cui è destinato il pacchetto. PkgServer per questa riga è il nome di dominio completo del server del sito.
Vengono create righe di tipo 2 per ogni dp a cui è destinato il pacchetto. PkgServer è DP NALPATH.Stato 0: nessuno
1 - INVIATO
2 - RICEVUTO
3 - INSTALLATO
4 - RIPROVARE
5 - NON RIUSCITO
6 - RIMOSSO
7 - RIMOZIONE IN SOSPESO (non usata)
8 - RIMOZIONE NON RIUSCITA
9 - RIPROVARE A RIMUOVEREDistributionJobs
- Contiene un elenco di processi di Package Transfer Manager insieme al relativo stato corrente.Colonne interessanti:
Colonna Valori Azione 0: nessuno
1 - AGGIORNAMENTO
2 - AGGIUNGI
3 - ELIMINAZIONE
4 - CONVALIDA
5 - ANNULLAProvincia 0 - IN SOSPESO
1 - PRONTO
2 - AVVIATO
3 - INPROGRESS
4 - RIAVVIO IN SOSPESO
5 - COMPLETA
6 - NON RIUSCITO
7 - ANNULLATO
8 - SOSPESODistributionPoints
: contiene un elenco di tutti i punti di distribuzione.Colonne interessanti:
Colonna Valori Azione 0: nessuno
1 - AGGIORNAMENTO
2 - AGGIUNGI
3 - ELIMINAZIONE
4 - CONVALIDA
5 - ANNULLAPullDPResponse
- Contiene temporaneamente la risposta dello stato del pacchetto inviata dai provider di dominio pull. DistMgr elabora la risposta e aggiornaPkgStatus
.Colonne interessanti:
Colonna Valori ActionState 1 - SUCCESS
2 - AVVISO
4 - ERRORE
8 - DOWNLOAD AVVIATO
16 - DOWNLOAD IN CORSO
32 - SCARICATO
64 - ANNULLATO
128 - ANNULLAMENTO RICHIESTOPkgNotification
- Tabella di notifica monitorata da SMSDBMON per attivare DistMgr per elaborare un pacchetto. La colonna Type definisce il tipo di notifica del pacchetto. Le righe in questa tabella vengono rimosse dopo che SMSDBMON attiva DistMgr.Colonne interessanti:
Colonna Valori Type 0 - SCONOSCIUTO
1 - PACCHETTO
2 - PROGRAMMA
4 - PACKAGE SERVER (DP)
8 - ACCOUNT DI ACCESSO AL PACCHETTO
15 - ALLEseguire il pull dei messaggi di stato dp - Elenco degli ID dei messaggi di stato generati dal dp pull
Colonne interessanti:
Colonna Valori ID stato 1 - SUCCESS
2 - AVVISO
4 - ERRORE
8 - DOWNLOAD AVVIATO
16 - DOWNLOAD IN CORSO
32 - SCARICATO
64 - ANNULLATOReport messaggio di stato di esempio:
<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>
Query SQL utili
Di seguito sono riportate alcune query SQL che possono essere utili per la risoluzione di vari problemi correlati alla distribuzione del contenuto.
Query sullo stato del pacchetto/dp
Tutti i pacchetti/DP non riusciti
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
Tutti i pacchetti/DP in corso
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
Tutti i pacchetti/DP riusciti
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
Tutti i pacchetti/DP in corso per più di tre giorni
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
Tutti i pacchetti/DP nello stato Non riuscito per più di tre giorni
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
Conteggio di tutti gli stati
SELECT MessageState, COUNT(MessageState) AS [Count] FROM vSMS_DPStatusDetails WHERE PackageID <> '' GROUP BY MessageState
Conteggio degli stati del pacchetto per 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
Stato di tutti i provider di dominio per un determinato pacchetto
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
Conteggio degli stati dp per pacchetto
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
Stato corrente del pacchetto/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>'
Ricerca di riferimenti dp orfani
La query seguente può essere usata per identificare se nel database sono presenti righe orfane che non sono più presenti nell'ambiente. Se il dp non è stato rimosso correttamente, potrebbero essere presenti righe orfane.
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
Query simile per un dp specifico in un sito specifico:
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
Proprietà SCF (Site Control File)
Proprietà SCF per DistMgr per il sito corrente
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'
Proprietà SCF per 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'
Pacchetti contenenti l'aggiornamento software specificato
Elencare tutti i pacchetti contenenti l'ID univoco di aggiornamento specificato.
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>'